Skip to content

Edit Only Selected Columns

The editOnlySelectedColumns() API ensures that editColumn() callbacks are only executed for columns that are explicitly selected in the DataTables request.


Basic Usage

use Yajra\DataTables\Facades\DataTables;
use App\Models\User;
 
Route::get('user-data', function() {
return DataTables::eloquent(User::query())
->editOnlySelectedColumns()
->editColumn('name', fn(User $user) => strtoupper($user->name))
->editColumn('email', fn(User $user) => strtolower($user->email))
->toJson();
});

Use Case

This is useful when you want to apply expensive transformations only to columns that are actually being displayed:

use Yajra\DataTables\Facades\DataTables;
use App\Models\Order;
 
Route::get('order-data', function() {
return DataTables::eloquent(Order::query())
->editOnlySelectedColumns()
->editColumn('details', function (Order $order) {
// This is only called if 'details' column is selected
return $order->loadExpensiveDetails();
})
->editColumn('total', function (Order $order) {
// This is only called if 'total' column is selected
return number_format($order->total, 2);
})
->toJson();
});

When a user hides the details or total column in their DataTables configuration, the corresponding callbacks are not executed, improving performance.


Behavior Without Selection

When no columns are explicitly selected in the request (default DataTables behavior), all editColumn() callbacks will be executed as normal.


See Also