A fluent query builder for Laravel applications built with Accelade. Build, filter, sort, and paginate Eloquent queries with a clean, expressive API.
- Search - Global search across multiple columns with relationship support
- Filters - Exact, partial, scope, and custom filters
- Sorting - Sortable columns with ascending/descending support
- Pagination - Standard, simple, and cursor pagination
- Request Binding - Automatically apply search, sort, and filters from HTTP request
- Relationship Support - Search and filter through related models
- PHP 8.2+
- Laravel 11.0+ or 12.0+
- Accelade ^1.0
composer require accelade/query-builderuse Accelade\QueryBuilder\QueryBuilder;
use App\Models\User;
// Create a query builder from a model
$users = QueryBuilder::for(User::class)
->allowedSearch(['name', 'email'])
->allowedFilters(['status', 'role'])
->allowedSorts(['name', 'created_at'])
->defaultSort('-created_at')
->paginate();For detailed documentation, see the docs folder:
- Overview - Getting started and basic concepts
- Search - Global search across columns
- Filters - Filter types and custom filters
- Sorting - Sortable columns and custom sorts
- Pagination - Pagination options and configuration
Enable global search across columns:
$users = QueryBuilder::for(User::class)
->allowedSearch(['name', 'email', 'bio'])
->get();
// Request: ?search=johnApply various filter types:
use Accelade\QueryBuilder\Filters\Filter;
$users = QueryBuilder::for(User::class)
->allowedFilters([
Filter::exact('status'),
Filter::partial('name'),
Filter::scope('active'),
])
->get();
// Request: ?filter[status]=active&filter[name]=johnEnable column sorting:
$users = QueryBuilder::for(User::class)
->allowedSorts(['name', 'email', 'created_at'])
->defaultSort('-created_at')
->get();
// Request: ?sort=name or ?sort=-created_at (descending)// Standard pagination
$users = QueryBuilder::for(User::class)
->allowedPerPage([10, 25, 50, 100])
->defaultPerPage(25)
->paginate();
// Simple pagination (better performance)
$users = QueryBuilder::for(User::class)->simplePaginate(15);
// Cursor pagination (infinite scroll)
$users = QueryBuilder::for(User::class)->cursorPaginate(15);$users = QueryBuilder::for(User::class)
->allowedSearch(['name', 'email'])
->allowedFilters(['status', 'role'])
->allowedSorts(['name', 'created_at'])
->defaultSort('-created_at')
->defaultPerPage(25)
->paginate();
// Request: ?search=john&filter[status]=active&sort=-created_at&per_page=50use Accelade\QueryBuilder\Facades\QueryBuilder;
$users = QueryBuilder::for(User::class)
->allowedSearch(['name', 'email'])
->paginate();composer testPlease see CHANGELOG for more information on what has changed recently.
Please see CODE_OF_CONDUCT for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.