我正在尝试使用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()
我简化了我的例子,但在这里我还有其他的。所以可能有办法做我想要的,但我不知道如何。
答案 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();