Условное предложение Laravel для фильтрации значений - PullRequest
0 голосов
/ 12 октября 2018

У меня есть таблица событий со статусом 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 голосов
/ 12 октября 2018

in_array функция, используемая в методе when, попробуйте этот

, потому что 0 (ноль) означает (ложь), по умолчанию понимают, поэтому попробуйте использовать внутреннюю функцию, когда метод

если не прошел статус, то установить значение по умолчанию как 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();
...