Skip to content
Icon

WARNING You're browsing the documentation for an upcoming version of Laravel DataTables. The documentation and features of this release are subject to change.

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 columns
Column::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