Add Column
You can add custom columns to your DataTables response using the addColumn API. Added columns are computed columns and are not part of the database, so search and sort are disabled by default.
[!WARNING] Added columns are computed and not part of the database. Search/sort will be disabled. Use
editColumnif you need 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) ->addColumn('intro', 'Hi {{$name}}!') ->toJson();});
Method 2: Closure
Use a closure for more complex logic:
use Yajra\DataTables\Facades\DataTables;use App\Models\User; Route::get('user-data', function() { $model = User::query(); return DataTables::eloquent($model) ->addColumn('intro', function(User $user) { return 'Hi ' . $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) ->addColumn('intro', 'users.datatables.intro') ->toJson();});
Create your view at resources/views/users/datatables/intro.blade.php:
Hi {{ $name }}!
Column Ordering
Position the column at a specific index by passing order as the third argument:
use Yajra\DataTables\Facades\DataTables;use App\Models\User; Route::get('user-data', function() { $model = User::query(); return DataTables::eloquent($model) ->addColumn('intro', 'Hi {{$name}}!', 2) // Position at index 2 ->toJson();});
Multiple Columns
Add multiple columns by chaining:
use Yajra\DataTables\Facades\DataTables;use App\Models\User; Route::get('user-data', function() { $model = User::query(); return DataTables::eloquent($model) ->addColumn('full_name', function (User $user) { return $user->first_name . ' ' . $user->last_name; }) ->addColumn('posts_count', function (User $user) { return $user->posts_count; }) ->addColumn('status_badge', function (User $user) { return $user->is_active ? 'Active' : 'Inactive'; }) ->toJson();});
Common Use Cases
Action Buttons
->addColumn('action', function (User $user) { return '<a href="/users/'.$user->id.'/edit">Edit</a>';})->rawColumns(['action']) // Allow HTML rendering
Computed Values
// addColumn for money values - return raw number->addColumn('total_amount', function (Order $order) { return $order->items_sum_price ?? 0;})
Conditional Formatting
->addColumn('status', function (User $user) { if ($user->is_active) { return '<span class="badge bg-success">Active</span>'; } return '<span class="badge bg-secondary">Inactive</span>';})->rawColumns(['status'])
Comparison: addColumn vs editColumn
| Feature | addColumn |
editColumn |
|---|---|---|
| Search | ❌ Disabled | ✅ Enabled |
| Sort | ❌ Disabled | ✅ Enabled |
| Database Column | ❌ Not required | ✅ Required |
| Use Case | Computed values | Modifying existing |
[!TIP] Need both search/sort AND multiple columns? Use
editColumnto modify existing columns and chain multiple calls.
See Also
- Edit Column - Modify existing columns
- Remove Column - Remove columns
- Raw Columns - Allow HTML in columns