Reputation: 1963
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();
Upvotes: 3
Views: 3527
Reputation: 176
For any future reader using 0 and 1
we can use when in the following way
->when($request->has('status'),
fn ($query) => $query->where("status", $request->status)
)->get();
we are getting the user requested status using has method in Laravel to deal with it.
Upvotes: 0
Reputation: 15115
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 not0,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();
Upvotes: 3