Manual Order
You may optionally disable the default ordering function of DataTables and write your own using the order API.
Basic Usage
use Yajra\DataTables\Facades\DataTables;use App\Models\User;use Illuminate\Database\Eloquent\Builder; Route::get('user-data', function() { $model = User::query(); return DataTables::eloquent($model) ->order(function (Builder $query) { if (request()->has('name')) { $query->orderBy('name', 'asc'); } if (request()->has('email')) { $query->orderBy('email', 'desc'); } }) ->toJson();});
Advanced Ordering
Multiple Column Ordering
return DataTables::eloquent(User::query()) ->order(function (Builder $query) { // Primary sort $query->orderBy('status', 'asc'); // Secondary sort $query->orderBy('name', 'asc'); }) ->toJson();
Conditional Ordering
return DataTables::eloquent(User::query()) ->order(function (Builder $query) { $sortColumn = request('sort', 'created_at'); $sortDirection = request('direction', 'desc'); // Only order by allowed columns $allowedColumns = ['name', 'email', 'created_at']; if (in_array($sortColumn, $allowedColumns)) { $query->orderBy($sortColumn, $sortDirection); } }) ->toJson();
See Also
- Order Column - Order by specific column
- Order Columns - Multiple column ordering