3

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();
2
  • Try $status = Input::get('status') ? 1 : 0;. The status parameter is probably a string and you only want two options 1 and 0 (a user can change the status parameters) Commented Oct 12, 2018 at 7:17
  • Have you read the documentation at laravel.com/docs/master/queries? It states that "The when method only executes the given Closure when the first parameter is true. If the first parameter is false, the Closure will not be executed." Commented Oct 12, 2018 at 7:18

2 Answers 2

3

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();
Sign up to request clarification or add additional context in comments.

3 Comments

select events.* from events where events.status is null; got this when i didnt pass the value
am using this in a filter section,if am not passing status then the query should work without where condition,other wise with 0 or 1
@Rp9 also used in second way by create new function and check
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.