如何将 where 子句添加到 Laravel 查询生成器

How to add where clause to Laravels 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()

我已经简化了我的例子,但在这里我还有其他的。所以可能有办法做我想做的事,但我不知道怎么做。

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

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

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

$search = $search->get()

如果你只有两种情况,你可以简单地使用:

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

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

作为另一种选择,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();