tijanidevit / query-filter
A simple, expressive, and powerful Laravel package that provides dynamic Eloquent models filters with clean syntax. It helps build reusable, maintainable, and readable query logic in Laravel apps.
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:package
README
A simple, expressive, and powerful Laravel package that provides dynamic Eloquent model filters with clean syntax. It helps you build reusable, maintainable, and readable query logic in Laravel applications.
📦 Why Use This Package?
In many Laravel applications, especially admin dashboards, reporting systems, and search filters, developers write the same filtering logic over and over:
$query = User::query(); if (request()->filled('name')) { $query->where('name', request('name')); } if (request()->filled('status')) { $query->where('status', request('status')); } return $query->get();
With Query Filter, you can simplify this:
User::query() ->filterBy([ 'name' => request('name'), 'status' => request('status'), ]) ->get();
📦 Installation
Run the composer command below:
composer require tijanidevit/query-filter
The package supports auto-discovery. If you're using Laravel < 5.5, add the provider manually in your config/app.php
:
'providers' => [ Tijanidevit\QueryFilter\Providers\FilterProvider::class, ]
🔍 Available Filters
filterBy()
Filter by a column or multiple columns.
User::query()->filterBy('status', 'active')->get(); User::query()->filterBy([ 'name' => 'Jane', 'status' => ['active', 'pending'], ])->get();
- Handles
null
, arrays, or empty values smartly. - Validates that the column exists in the database.
filterByRelation()
Filter using related models:
Post::query()->filterByRelation([ 'user' => [ 'status' => 'active', ] ])->get();
Supports closures and nullable logic.
filterByMonth()
/ filterByYear()
Order::query() ->filterByMonth([1, 2]) // January and February ->filterByYear(2024) ->get();
filterByDate()
User::query()->filterByDate('2024-01-01')->get();
filterByDateRange()
Order::query()->filterByDateRange('2024-01-01', '2024-03-01')->get();
filterFromRequest()
Automatically apply filters based on request input:
User::query()->filterFromRequest(request(), [ 'name', 'email', 'status' ])->get();
sortResultBy()
/ latestBy()
/ oldestBy()
User::query()->sortResultBy('created_at', 'desc')->get(); Post::query()->latestBy('published_at')->get();
📘 Full Example
$users = User::query() ->filterBy([ 'name' => request('name'), 'status' => request('status'), 'email_verified_at' => ['null' => request('missing_email_verification')], ]) ->filterByRelation([ 'roles' => [ 'slug' => request('role_slug'), ], ]) ->filterByDateRange(request('from'), request('to')) ->sortResultBy(request('sort_by'), request('sort_dir', 'asc')) ->get();
✅ Requirements
- Laravel 9, 10, 11
- PHP 8.0+
📄 License
MIT © Mustapha Tijani
🤝 Contributing
Pull requests and issues are welcome. Help improve the package and make it more awesome!