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
$1which 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
- Order Columns - Configure multiple column ordering
- Order By Nulls Last - Null values ordering