In this article, We are implementing laravel eloquent when condition. In the filter-out process, we use the if-else condition on request. Check the code below.
if($request->filter_by == 'amount')
{
$query->where('amount', '>', request('amount', 0));
}
if($request->filter_by == 'created_at')
{
$query->orderBy('created_at', request('order', 'desc'));
}
How to use eloquent when in laravel
You can use the when() method. It is more readable and user-friendly. Check the code below.
$query = Order::query();
$query->when(request('filter_by') == 'amount', function($q){
return $q->where('amount','>', request('amount',0));
});
$query->when(request('filter_by') == 'created_at', function($q){
return $q->orderBy('created_at', request('order','desc'));
});
You can pass the third argument to the when method. This closure will only execute if the first argument evaluates as false.
$query = Order::query();
$query->when(request('filter_by') == 'amount', function($q){
return $q->where('amount','>', request('amount',0));
}, function($q){
return $q->orderBy('created_at', request('order','desc'));
})->get();
It's not just a prettier way to write the same "IF" but is also a great way to organize conditional queries.
You can read more about this type of article on the site
Top comments (0)