Skip to content
Icon

WARNING You're browsing the documentation for an upcoming version of Laravel DataTables. The documentation and features of this release are subject to change.

Order Column

In some cases, you may want to use a custom order SQL for a specific column. To achieve this, use the orderColumn API.

[!TIP] Order column has a special variable $1 which is being replaced as the order direction value of the request.


Basic Usage

In this example, we will order the column name with nulls as last result:

use Yajra\DataTables\Facades\DataTables;
use App\Models\User;
 
Route::get('user-data', function() {
$model = User::query();
 
return DataTables::eloquent($model)
->orderColumn('name', '-name $1')
->toJson();
});

Using Closure

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)
->orderColumn('name', function (Builder $query, $order) {
$query->orderBy('status', $order);
})
->toJson();
});

Disable Ordering

use Yajra\DataTables\Facades\DataTables;
use App\Models\User;
 
Route::get('user-data', function() {
$model = User::query();
 
return DataTables::eloquent($model)
->orderColumn('name', false)
->toJson();
});

Common Patterns

Nulls Last

return DataTables::eloquent($model)
->orderColumn('name', 'name $1 NULLS LAST')
->toJson();

Custom Direction Mapping

use Illuminate\Database\Eloquent\Builder;
 
return DataTables::eloquent($model)
->orderColumn('status', function (Builder $query, $order) {
// Map ascending/descending to custom status order
$direction = $order === 'asc' ? 'desc' : 'asc';
$query->orderBy('priority', $direction);
})
->toJson();

See Also