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 ($row) { return $row->first_name . ' ' . $row->last_name; }) ->addColumn('action', function ($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
editColumnif 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
- Eloquent Data Source - Use Eloquent models
- Collection Data Source - Use Collections
- Filter Column - Custom column filtering
- Manual Search - Custom search logic