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
- Edit Column - Modifying existing columns
- Add Column - Adding custom columns