Get Filtered Query
The getFilteredQuery() API returns the query after DataTables processing (filtering, ordering, pagination) has been applied. This is useful when you need to access the processed query for debugging or additional operations.
Basic Usage
use Yajra\DataTables\Facades\DataTables;use App\Models\User; Route::get('user-data', function() { $model = User::query(); $dataTable = DataTables::eloquent($model); // Access the filtered query $filteredQuery = $dataTable->getFilteredQuery(); // Log the SQL for debugging logger()->info($filteredQuery->toSql()); return $dataTable->toJson();});
Use Cases
Debugging
use Yajra\DataTables\Facades\DataTables;use App\Models\User; Route::get('user-data', function() { $dataTable = DataTables::eloquent(User::query()); // Check if any filters were applied $query = $dataTable->getFilteredQuery(); if ($query->getBindings()) { logger()->info('Query with filters', [ 'sql' => $query->toSql(), 'bindings' => $query->getBindings(), ]); } return $dataTable->toJson();});
Counting After Filtering
use Yajra\DataTables\Facades\DataTables;use App\Models\User; Route::get('user-data', function() { $dataTable = DataTables::eloquent(User::query()); // Get count of filtered results $filteredCount = $dataTable->getFilteredQuery()->count(); return $dataTable ->with('filtered_count', $filteredCount) ->toJson();});
Note
getFilteredQuery()callsprepareQuery()internally, which means filtering, ordering, and pagination are applied to the query. The query is cloned before processing, so the original query is not modified.
See Also
- Additional Data Response - Adding extra data to response
- Query Builder Data Source - Using Query Builder