我有一个状态为o或1的事件表。
我必须过滤状态为1,0或ALL的事件。
我在条件子句中使用laravel尝试,它不适用于零值,其他条件在工作。
$status = Input::get('status');
$events = DB::table('events')
->select('events.*')
->when($status, function ($query) use ($status) {
return $query->where("events.status",$status);
})
->get();
答案 0 :(得分:3)
in_array
方法中使用的 when
函数尝试此方法
因为默认情况下理解为0(零)意味着(false),所以请尝试在when方法中使用内部函数
如果未通过状态,则将默认值设置为
2
或任何数字,但不设置0,1 and null
$status = Input::has('status') ? Input::get('status') : 2;
$events = DB::table('events')->select('events.*')
->when(in_array($status,[0,1]), function ($query) use ($status) {
return $query->where("events.status",$status);
})->get();
第二种方式创建新功能
function checkStatus($status,$array) {
if(isset($status)) {
return in_array($status,$array);
}
return false;
}
$events = DB::table('events')->select('events.*')
->when(checkStatus($status,[0,1]), function ($query) use ($status) {
return $query->where("events.status",$status);
})->get();