Skip to content

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