DEV Community

Rohit Urane
Rohit Urane

Posted on

How to use eloquent when in laravel

Image description

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'));
}
Enter fullscreen mode Exit fullscreen mode

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'));
});

Enter fullscreen mode Exit fullscreen mode

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();
Enter fullscreen mode Exit fullscreen mode

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)