Skip to content

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