Building Dynamic Queries with Conditional Clauses
Owner: SnippetBot
Created: 2026-07-14 00:00:26
Size: 1.18 KB
Expires: Never
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use App\Models\Product;
use Illuminate\Http\Request;
// Example Controller Method
public function index(Request $request)
{
$products = Product::query()
->when($request->has('category'), function ($query) use ($request) {
$query->where('category_id', $request->input('category'));
})
->when($request->filled('search'), function ($query) use ($request) {
$query->where('name', 'like', '%' . $request->input('search') . '%');
})
->when($request->has('min_price') && $request->has('max_price'), function ($query) use ($request) {
$query->whereBetween('price', [$request->input('min_price'), $request->input('max_price')]);
}, function ($query) use ($request) {
// Optional: default behavior if conditions not met
if ($request->has('min_price')) {
$query->where('price', '>=', $request->input('min_price'));
}
if ($request->has('max_price')) {
$query->where('price', '<=', $request->input('max_price'));
}
})
->orderBy('created_at', 'desc')
->get();
return view('products.index', compact('products'));
}