otisz / laravel-eloquent-filter
Flexible Eloquent filter from URL queries
Requires
- php: ^8.0
- illuminate/database: ^8.12|^9.0|^10.0|^11.0
- illuminate/http: ^8.12|^9.0|^10.0|^11.0
- illuminate/support: ^8.12|^9.0|^10.0|^11.0
README
Laravel package for generating flexible Eloquent filters.
Install
You can install the package via Composer
composer require otisz/laravel-eloquent-filter
Usage
Use the artisan command to create a new filter class:
php artisan make:filter TestFilter
This command generates a new filter class to app/Filters
folder:
<?php namespace App\Filters; use Illuminate\Http\Request; use Otisz\EloquentFilter\Filter; /** * @property \Illuminate\Database\Eloquent\Builder $builder * @method static \App\Filters\TestFilter boot($class) * @mixin \Illuminate\Database\Eloquent\Builder */ final class TestFilter extends Filter { /** * @param \Illuminate\Http\Request|null $request * * @return self */ public function search(Request $request = null) { // return $this; } /** * @param \Illuminate\Http\Request|null $request * * @return self */ public function order(Request $request = null) { // return $this; } }
How to use in your controller:
There are 3 ways to boot up filter class:
// Eloquent Builder: TestFilter::boot(Model::query()); TestFilter::boot(Model::where('column', '=', 1)); // Namespace TestFilter::boot(Model::class); // Model TestFilter::boot(new Model);
Filter class contains 2 methods: search()
and order()
.
You can pass \Illuminate\Http\Request
or \Illuminate\Foundation\Http\FormRequest
to these methods, but not required.
TestFilter::boot(Model::class)->search()->order();
If you call a method that is not defined in the filter class, it will automatically call the Builder class.
For example filter class does not have toSql()
method:
TestFilter::boot(Model::class)->toSql();
In this case, toSql()
method called on Builder class: $this->builder->toSql()
Feel free write your method if needed.
Contributing
Security Vulnerabilities
If you discover any security-related issues, please email leventeotta@gmail.com instead of using the issue tracker. All security vulnerabilities will be promptly addressed.
Licence
The Laravel Eloquent Filter package is open-source software licensed under the MIT license.