A lightweight, clean, and reusable query filtering library for Laravel Eloquent models — built to help you keep your controllers clean and your queries dynamic.
- Chainable, dynamic Eloquent filtering based on request input
- Filters as separate classes — fully testable and reusable
- Simple base class for filters
- Works out-of-the-box with Laravel
- Publishable config
- PHP >= 8.1
- Laravel ^11.0 || ^12.0
composer require alifcoder/query-filter
Publish the config (optional):
php artisan vendor:publish --tag=query-filter-config
You can configure default filter namespace or behavior.
php artisan make:filter StatusFilter
// app/Filters/StatusFilter.php
use Alif\QueryFilter\Contracts\Filter;
class StatusFilter implements Filter
{
public function handle(Builder $query, $value, Closure $next)
{
if ($value) {
$query->where('status', $value);
}
return $next($query);
}
}
use Alif\QueryFilter\QueryFilter;
$filtered = Post::filter(QueryFilter::make([
'status' => request('status'),
'sort' => request('sort'),
]))->get();
GET /posts?status=published&sort=created_at
src/
├── Contracts/
│ └── Filter.php
├── Filters/
│ └── QueryFilter.php
├── QueryFilterServiceProvider.php
config/
└── query-filter.php
MIT © Shukhratjon Yuldashev