如何将 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();
我正在尝试使用查询生成器为我的搜索添加条件。因此,如果访问权限为 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();