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

Php 如何将where子句添加到Laravels查询生成器,php,mysql,laravel,query-builder,Php,Mysql,Laravel,Query Builder,我正在尝试使用查询生成器向搜索添加条件。因此,如果访问权限为1,则添加此“where”,否则添加另一个“where”。但要做到这一点,我必须重复相同的代码,并更改位置。我正在这样做: if(access==1){ $search = DB::table('users') ->select('name') ->where('case',$x)

我正在尝试使用查询生成器向搜索添加条件。因此,如果访问权限为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还支持类似以下内容的内置功能:

$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();

您应该在条件中使用==而不是=。那就好了。但是您也可以做一些事情,比如where'case',access==1$x、 $y。我想用你的第二个例子。@Daniel请不要根据其他用户的输入修改你的问题,因为这会使他们的话无效,在某些情况下是问题的原因。在这种情况下,您的代码似乎可以正常工作,而不会出现拼写错误。请将您的问题保留在可回答的状态,或者在这种情况下,保留创建该问题时的离题状态。我是用手机编写代码的,因此我没有意识到错误是用=,而不是=。现在一切都对了,就是这样。这解决了我的问题。问题是get返回结果,但我必须使用一个变量来获取它,而我没有。谢谢你的赏赐