Php 用于筛选值的Laravel条件子句
我有一个状态为o或1的事件表 我必须过滤状态为1,0或全部的事件 我试过使用laravel when条件子句,它不适用于值为零的情况,其他条件都适用Php 用于筛选值的Laravel条件子句,php,laravel,laravel-query-builder,Php,Laravel,Laravel Query Builder,我有一个状态为o或1的事件表 我必须过滤状态为1,0或全部的事件 我试过使用laravel when条件子句,它不适用于值为零的情况,其他条件都适用 $status = Input::get('status'); $events = DB::table('events') ->select('events.*') ->when($status, function ($query) use ($status) {
$status = Input::get('status');
$events = DB::table('events')
->select('events.*')
->when($status, function ($query) use ($status) {
return $query->where("events.status",$status);
})
->get();
in_array
函数在方法中使用时请尝试此方法
因为默认情况下0(零)表示(false),所以请尝试在when方法中使用内部函数
如果未通过状态,则将默认值设置为2
或任何数字,但不设置为0,1和null
第二种方法是创建一个新函数
尝试$status=Input::get('status')?1 : 0;代码>。状态参数可能是一个字符串,您只需要两个选项1和0(用户可以更改状态参数)。您阅读了位于的文档了吗?它表示“when方法仅在第一个参数为true时执行给定的闭包。如果第一个参数为false,则不会执行闭包。”从events
中选择events
*,其中events
status
为null;当我没有传递值时得到这个,我在一个过滤器部分中使用它,如果我没有传递状态,那么查询应该在没有where条件的情况下工作,否则使用0或1@Rp9通过创建新函数和检查,也可在第二种方式中使用
$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();