laravel-query-builder-table-filters maintained by adesin-fr
Laravel Query Builder Table Filters
Small Laravel package containing only Spatie Query Builder helpers required by the Vue table package.
It has no Inertia dependency and does not render frontend configuration.
Install
composer require adesin-fr/laravel-query-builder-table-filters
Filters
use AdesinFr\LaravelQueryBuilderTableFilters\AllowedDateFilter;
use AdesinFr\LaravelQueryBuilderTableFilters\AllowedNumberFilter;
use AdesinFr\LaravelQueryBuilderTableFilters\AllowedNumberRangeFilter;
use App\Models\User;
use Spatie\QueryBuilder\QueryBuilder;
$users = QueryBuilder::for(User::query())
->allowedFilters([
'name',
AllowedDateFilter::make('created_at'),
AllowedNumberFilter::make('score'),
AllowedNumberRangeFilter::make('age'),
])
->allowedSorts(['name', 'created_at'])
->paginate(request('perPage', 15));
Prefixed Multi-Table Parameters
For one endpoint serving several tables, temporarily apply Spatie parameter names:
use AdesinFr\LaravelQueryBuilderTableFilters\QueryBuilderTable;
use Spatie\QueryBuilder\QueryBuilder;
$users = QueryBuilderTable::for('users')->withParameterNames(function () {
return QueryBuilder::for(User::query())
->allowedFilters(['name'])
->allowedSorts(['name'])
->paginate(perPage: request('perPage', 15), pageName: 'usersPage')
->withQueryString();
});
This reads parameters like:
users_filter[name]=john&users_sort=name&usersPage=2
For the default table, standard Spatie names are used:
filter[name]=john&sort=name&page=2
Scope
This package only provides backend query helpers. It intentionally does not include:
- Inertia macros.
- Table UI configuration builders.
- CSV export.
- Pagination or resource wrappers.