Edit Column
You can modify existing columns in your DataTables response using the editColumn API. Unlike addColumn, edited columns remain part of the database and support search/sort functionality.
Method 1: Blade String Syntax
Use Blade-style string interpolation:
use Yajra\DataTables\Facades\DataTables;use App\Models\User; Route::get('user-data', function() { $model = User::query(); return DataTables::eloquent($model) ->editColumn('name', 'Modified: {{$name}}') ->toJson();});
Method 2: Closure
Use a closure for dynamic values:
use Yajra\DataTables\Facades\DataTables;use App\Models\User; Route::get('user-data', function() { $model = User::query(); return DataTables::eloquent($model) ->editColumn('name', function(User $user) { return strtoupper($user->name); }) ->toJson();});
Method 3: Blade View
Render the column using a Blade view:
use Yajra\DataTables\Facades\DataTables;use App\Models\User; Route::get('user-data', function() { $model = User::query(); return DataTables::eloquent($model) ->editColumn('name', 'users.datatables.name') ->toJson();});
Create your view at resources/views/users/datatables/name.blade.php:
<strong>{{ $name }}</strong>
Common Use Cases
Format Dates
use Illuminate\Support\Str; Route::get('user-data', function() { return DataTables::eloquent(User::query()) ->editColumn('created_at', function (User $user) { return $user->created_at->format('M d, Y'); }) ->toJson();});
Money Formatting
For money values, use Column::make() with exportFormat() for exports:
// Use Column::make() for decimal/float columnsColumn::make('price', 'orders.price')
Truncate Text
use Yajra\DataTables\Facades\DataTables;use App\Models\User;use Illuminate\Support\Str; Route::get('product-data', function() { return DataTables::eloquent(Product::query()) ->editColumn('description', function (Product $product) { return Str::limit($product->description, 50); }) ->toJson();});
Status Badges
use Yajra\DataTables\Facades\DataTables;use App\Models\User; Route::get('user-data', function() { return DataTables::eloquent(User::query()) ->editColumn('status', function (User $user) { $color = $user->is_active ? 'success' : 'secondary'; return '<span class="badge bg-'.$color.'">'.$user->status.'</span>'; }) ->rawColumns(['status']) // Allow HTML rendering ->toJson();});
Multiple Column Edits
Chain multiple edits:
use Yajra\DataTables\Facades\DataTables;use App\Models\User; Route::get('user-data', function() { return DataTables::eloquent(User::query()) ->editColumn('name', function (User $user) { return $user->full_name; }) ->editColumn('email', function (User $user) { return '<a href="mailto:'.$user->email.'">'.$user->email.'</a>'; }) ->editColumn('created_at', function (User $user) { return $user->created_at->diffForHumans(); }) ->rawColumns(['email']) // Allow HTML in email column ->toJson();});
Comparison: editColumn vs addColumn
| Feature | editColumn |
addColumn |
|---|---|---|
| Search | ✅ Enabled | ❌ Disabled |
| Sort | ✅ Enabled | ❌ Disabled |
| Database Column | ✅ Required | ❌ Not required |
| Use Case | Modify existing | Add new computed |
See Also
- Add Column - Add new computed columns
- Remove Column - Remove columns
- Raw Columns - Allow HTML in columns