Laravel条件子句用于过滤值

时间:2018-10-12 07:06:17

标签: php laravel laravel-query-builder

我有一个状态为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();

1 个答案:

答案 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();