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

qaxu7uf2  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(372)

**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

两年前关门了。
改进这个问题
我正在尝试使用查询生成器为搜索添加条件。因此,如果访问权限为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()

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

nvbavucw

nvbavucw1#

你的第二个例子是正确的想法(尽管它有一堆拼写错误,例如使用 = 而不是 == ).
作为另一种选择,laravel还支持类似以下内容的内置条件where子句:

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

7kjnsjlb2#

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

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

68bkxrlz3#

您需要将结果分配给 $search 变量和替换 === 当然,如果您的真实代码比较困难:

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

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

$search = $search->get()

相关问题