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.

Extended DataTable

We can extend and reuse our DataTable class inside our controller by using before and response callback.


Quick Example

<?php
// routes/web.php
 
use App\DataTables\RolesDataTable;
use Yajra\DataTables\DataTableAbstract;
use Illuminate\Support\Facades\Route;
 
Route::get('datatable', function(RolesDataTable $dataTable) {
return $dataTable
->before(function (DataTableAbstract $dataTable) {
return $dataTable->addColumn('test', 'added inside controller');
})
->response(function (\Illuminate\Support\Collection $response) {
$response['test'] = 'Append Data';
 
return $response;
})
->withHtml(function(\Yajra\DataTables\Html\Builder $builder) {
$builder->columns(['id', 'name', 'etc...']);
})
->with('key', 'value')
->with([
'key2' => 'value2',
'key3' => 'value3',
])
->render('path.to.view');
});

Available Callbacks

before Callback

->before(function (DataTableAbstract $dataTable) {
// Add columns, modify query, etc.
return $dataTable;
})

response Callback

->response(function (\Illuminate\Support\Collection $response) {
// Modify the response
$response['custom_field'] = 'value';
return $response;
})

withHtml Callback

->withHtml(function (\Yajra\DataTables\Html\Builder $builder) {
$builder->columns(['id', 'name']);
})

See Also