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.

Query Builder Data Source

Use Laravel's Query Builder as the data source for your DataTables. The Yajra\DataTables\QueryDataTable class handles the conversion of your Query Builder into a DataTables-compatible response.


Quick Start

use Yajra\DataTables\Facades\DataTables;
use Illuminate\Support\Facades\DB;
 
Route::get('user-data', function() {
$query = DB::table('users');
 
return DataTables::query($query)->toJson();
});

Adding Custom Columns

Add computed columns with closures:

use Yajra\DataTables\Facades\DataTables;
use Illuminate\Support\Facades\DB;
 
Route::get('user-data', function() {
$query = DB::table('users');
 
return DataTables::query($query)
->addColumn('full_name', function (object $row) {
return $row->first_name . ' ' . $row->last_name;
})
->addColumn('action', function (object $row) {
return '<button>Edit</button>';
})
->toJson();
});

[!NOTE] Added columns are computed and not part of the database, so search and sort are disabled by default. Use editColumn if you need search/sort functionality.


Filtering

Filter results in your query before passing to DataTables:

use Yajra\DataTables\Facades\DataTables;
use Illuminate\Support\Facades\DB;
 
Route::get('user-data', function() {
$query = DB::table('users')
->where('active', true)
->where('email_verified_at', '!=', null);
 
return DataTables::query($query)->toJson();
});

With Join Statements

Join related tables when building your query:

use Yajra\DataTables\Facades\DataTables;
use Illuminate\Support\Facades\DB;
 
Route::get('user-data', function() {
$query = DB::table('users')
->join('posts', 'users.id', '=', 'posts.user_id')
->select('users.*', DB::raw('COUNT(posts.id) as post_count'))
->groupBy('users.id');
 
return DataTables::query($query)->toJson();
});

When to Use Query Builder

Use Case Recommendation
Complex JOINs ✅ Perfect for Query Builder
Raw SQL ✅ Great for custom queries
Large datasets ✅ Efficient server-side processing
Simple CRUD tables Consider Eloquent

See Also