筛选值时的Laravel条件子句

fnatzsnv  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(145)

我有一个状态为0或1的事件表。
我必须过滤状态为1、0或ALL的事件。
我试过使用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();
czfnxgou

czfnxgou1#

when方法中使用的in_array函数请尝试以下方法
因为0(零)表示默认情况下理解为(假),所以尝试在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();
roqulrg3

roqulrg32#

对于任何将来使用0和1的读卡器
我们可以按以下方式使用when

->when($request->has('status'),
fn ($query) => $query->where("status", $request->status)
)->get();

我们正在获取用户请求的状态,使用Laravel中的has方法进行处理。

相关问题