Sort your Laravel Eloquent queries results using orderBy()
Table of contents:
The basics of orderBy()
Multi-column sorting using orderBy()
Getting fancy with orderByRaw()
Use reorder() to unorder what’s been ordered
Before we dive deep, let’s understand the foundation:
$users = User::query()->orderBy('name', 'desc')->get();
In this snippet, we’re using Laravel Eloquent to fetch users from their table and ordering them in descending order by their names.
- The column’s name.
The order direction: Either
asc(the default value) for ascending or
What if you want to sort by multiple columns? Simple. Just chain multiple
$users = User::query()->orderBy('name', 'desc')->orderBy('email', 'asc')->get();
This way, Eloquent sorts users by their names first. If two or more users have the same name, it then sorts those users by their email in ascending order.
I actually learned that after years of SQL and Laravel experience. 😅
When you need a more complex sorting mechanism, Laravel’s got you covered with
$orders = User::query()->orderByRaw('updated_at - created_at DESC')->get();
This advanced method lets you sort the results based on the difference between the
created_at timestamps. Handy, right?
If you need to undo the ordering of a query you are building based on some condition, you can use the
$ordered = User::orderBy('name');$unordered = $ordered->reorder()->get();
And if you wish to reset and apply a completely new ordering without calling
$ordered = User::query()->orderBy('name');$reorderedByEmail = $query->reorder('email', 'desc')->get();
I’ll never get bored of Laravel’s convenience!