Skip to content

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