Laravel advanced search query fix

后端 未结 8 1326
终归单人心
终归单人心 2021-01-28 21:34

I have a search form with multiple input and select boxes I need help to get if conditions in my query in order to each part works separately and all at once.

he

8条回答
  •  广开言路
    2021-01-28 22:07

    This is just to give an idea. You can use a multiple ->where() and eager loading ->with() for your query. Take a look with this query below:

    $products = Product::where('price', '>=', $min_price) // you get the max and min price 
            ->where('id', '<=', $max_price)->select('id')
            ->with([
                "brand" => function ($query) {
                    $query->whereIn('id', $brand_ids); // [1, 2, 3,...]
                },
                "specifications" => function ($query) {
                    $query->where('some_column', '=', 'possible-value'); // single condition
                },
                "specifications.subspecifications" => function ($query) {
                    $query->where([
                        'some_column' => 'possible-value',
                        'another_column' => 'possible-value'
                    ]); // you can also pass arrays of condition
                }
            ])->get(); // This will return the products with the price set by the user
                       // Since we're just using ->with(), this will also return those products
                       // that doesn't match the other criteria specifications) so we 
                       // still need to filter it.
    

    Finally, you can filter the products which matches the specifications, - the product with an empty specifications means this product does not match the criteria, therefore we'll have to remove it from the collection.

    $filtered =  $products->filter(function ($product, $key) {
        return count($product->brand) > 0 && count($product->specifications) > 0;
        // add your other boolean conditions here
    });
    
    dd($filtered->toArray()); // your filtered products to return
    

提交回复
热议问题