Simplify Complex Sorting in Laravel Using reorder()
In Laravel, queries often come with default sorting:
$query = Product::query()
->orderBy('created_at', 'desc');
Later in the application:
$query->orderBy('price');
👉 Problem:
- Both sorting clauses now exist
- Results may not behave as expected
The Cleaner Solution: reorder()
Laravel allows you to completely reset previous ordering.
Basic Usage
$query->reorder('price', 'asc');
Now:
- Old sorting removed
- Only price sorting applied
Real Project Example
Imagine admin filters:
$query = Product::query()
->latest();
if ($request->sort === 'price') {
$query->reorder('price');
}
if ($request->sort === 'name') {
$query->reorder('name');
}
Perfect for:
- Dynamic sorting
- Admin panels
- API filtering
Remove All Ordering
$query->reorder();
👉 Removes all existing orderBy clauses.
Why This Is Useful
It helps you:
- Override default sorting cleanly
- Avoid conflicting
orderByclauses - Keep query logic reusable
- Build dynamic filters easily
When to Use It
Use reorder() when:
- Base queries already contain sorting
- Building dynamic sorting systems
- Reusing query builders