如何将where子句添加到Laravels Query Builder

时间:2018-05-25 19:50:08

标签: php mysql laravel query-builder

我正在尝试使用Query Builder为搜索添加条件。因此,如果访问是1,则添加“where”,否则添加“where”。但问题是要做到这一点我必须重复相同的代码并改变其中的位置。我这样做:

if(access==1){
    $search = DB::table('users')
                       ->select('name')
                       ->where('case',$x)
                       ->get();
 } else {
      $search = DB::table('users')
                       ->select('name')
                       ->where('case',$y)
                       ->get();
}

我只是想做这样的事情

search = DB::table('users')
                   ->select('name');
if(access==1){
        $search->where('case',$x);
     } else {
          $search->where('case',$y);
    }

$search->get()

我简化了我的例子,但在这里我还有其他的。所以可能有办法做我想要的,但我不知道如何。

3 个答案:

答案 0 :(得分:1)

您需要将结果分配给$search变量并在条件下将=替换为==,如果您的实际代码当然更难:

$search = DB::table('users')->select('name');

if($access == 1)
     {
        $search = $search->where('case',$x);
     } 
     else 
     {
        $search = $search->where('case',$y);
     }

$search = $search->get()

答案 1 :(得分:1)

如果您只有两种情况,可以使用:

$search = DB::table('users')
    ->select('name')
    ->where('case', (($access == 1)?$x:$y)))
    ->get();

答案 2 :(得分:1)

你的第二个例子是正确的想法(虽然它有一堆拼写错误,例如使用=而不是==)。

作为另一种选择,Laravel还支持看起来像这样的内置conditional where clauses

$search = DB::table('users')->select('name')
    ->when($access === 1, function($q) use ($x) {
        return $q->where('case', $x);
    })
    ->when($access === 2, function($q) use ($y) {
        return $q->where('case', $y);
    })
    ->get();