Search code examples
phplaravellaravel-query-builder

Laravel conditional clause when for filtering value


I have a event table with status o or 1.

I have to filter the event with status 1,0 or ALL.

I tried with laravel when conditional clause,its not working with value zero,other conditionals are working.

$status    = Input::get('status');
$events    = DB::table('events')
          ->select('events.*')
          ->when($status, function ($query) use ($status) {
           return $query->where("events.status",$status);
           })
          ->get();

Solution

  • in_array function used in when method try this one

    because 0(zero) means(false) by default understand so try to use inner function in when method

    if didn't pass status then set default value as 2 or any number but not 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();
    

    second way create a new function

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