【问题标题】:Laravel: unable to build multiple orWhere query with laravel query builderLaravel:无法使用 laravel 查询构建器构建多个 orWhere 查询
【发布时间】:2017-06-29 16:38:27
【问题描述】:

我正在尝试使用 laravel 查询生成器进行此查询,但我不明白我该怎么做:

查询

select * from `data_table_1486794412` where (`column_2` = '2014' or `column_2` = '2015') and (`column_1` = 'GNDU')

我的代码是:

$dbObj =  DB::table($datatableName->dataset_table);
$dbObj->orWhere('column_2','2015');
$dbObj->orWhere('column_2','2015');
$dbObj->where(array('column_1','GNDU'));

Laravel 生成查询:

select * from `data_table_1486794412` where `column_2` = ? or `column_2` = ? and (`column_1` = ?)

我的桌子

【问题讨论】:

    标签: php laravel laravel-5 eloquent laravel-query-builder


    【解决方案1】:

    我在循环中使用 orWhere。你能告诉我如何在循环中使用它吗?因为 2014 和 2015 将以数组的形式出现。

    你可以使用 whereIn 而不是循环,你可以在其中传入一个数组:

    $dbObj =  DB::table($datatableName->dataset_table);
    $dbObj->where('column_1', 'GNDU')->whereIn('column_2', $yourArray)->get();
    

    【讨论】:

      【解决方案2】:

      为了将 WHERE 子句分组以便它们被括号包围,您需要将回调传递给 where() 调用。

      下面的代码应该可以解决问题:

      $dbObj =  DB::table($datatableName->dataset_table);
      $column1 = 2015;
      $column2 = 2016;    
      
      $dbObj->where(function($query) use ($column1, $column2) {
        $query->orWhere('column_1',$column1);
        $query->orWhere('column_2',$column2);
      });
      $dbObj->where(array('column_1','GNDU'));
      

      【讨论】:

      • 我们可以通过匿名函数传递额外的参数吗?与$query,$extra
      • 你要传递什么参数?
      • 每列的值来自单独的 var。表示 2015 年和 2014 年
      • 我添加了一个关于如何将值传递给回调的示例
      【解决方案3】:

      我认为这是工作

      $dbObj =  DB::table($datatableName->dataset_table);
      $dbObj->orWhere('column_2','2015')->orWhere('column_2','2015')->where(array('column_1','GNDU'))
      

      【讨论】:

      • 我在循环中使用orWhere。你能告诉我如何在循环中使用它..因为20142015array 的形式出现
      猜你喜欢
      • 1970-01-01
      • 2021-09-25
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 2020-03-19
      相关资源
      最近更新 更多