Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于筛选值的Laravel条件子句_Php_Laravel_Laravel Query Builder - Fatal编程技术网

Php 用于筛选值的Laravel条件子句

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) {

我有一个状态为o或1的事件表

我必须过滤状态为1,0或全部的事件

我试过使用laravel when条件子句,它不适用于值为零的情况,其他条件都适用

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