1

So I want to get all items if the user hasn't selected any options, otherwise query the items according to the request data. However I can't pass the $request to my function. Here is my code:

public function showProducts(Request $request) 
{
       $products = Product::all();
       if(count($request->all()) != 0) {
                $products = Product::where(function($query) {
                    $minPrice = $request['min'] ? $request['min'] : null;
                    $maxPrice = $request['max'] ? $request['max'] : null;
                    $colors = $request['color'] ? $request['color'] : null;
                    $sizes = $request['size'] ? $request['size'] : null;

                    if($minPrice != null && $maxPrice != null) {
                        $query->where('price', '>=', $minPrice)->where('price', '<=', $maxPrice);
                    }

                    if($minPrice == null && $maxPrice == null && $colors == null && $sizes == null)  {

                    }
                })->get();
            }
}

Obviously I have $request in my showProducts closure however I can't access it inside my anonymous function inside where. How can I use my $request data in the anonymous function?

1 Answer 1

6

You need to use the use keyword to pass in parameters from the parent scope:

$products = Product::where(function($query) use ($request) {
    // $request is now available

Now $request is available in your closure.

See here: http://php.net/manual/en/functions.anonymous.php#example-200

Sign up to request clarification or add additional context in comments.

2 Comments

Worked like a charm. Didn't know I have to use use to do it. Thank you!
Exactly what I needed! I couldn't find it anywhere in Laravel documentation, but finally thanks to you, I'm saved.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.