laraditz / model-filter
A simple eloquent model filter.
Installs: 144
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Type:laravel-package
Requires
- php: ^7.4|^8.0
- illuminate/database: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/http: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^7.0|^8.0|^9.0|^10.0|^11.0
This package is auto-updated.
Last update: 2024-12-15 10:21:13 UTC
README
A simple eloquent model filter for Laravel and Lumen.
Installation
Via Composer
$ composer require laraditz/model-filter
Configuration
Add filterable trait to your model as below snippet:
use Laraditz\ModelFilter\Filterable; class User extends Model implements AuthenticatableContract, AuthorizableContract { use Filterable; ... }
Create filter class under the App/Filters
folder with <model_name>Filter
format. For example for User
model, you will need to create UserFilter
class.
Below snippet shows how the UserFilter
could look like:
namespace App\Filters; use Laraditz\ModelFilter\Filter; use Illuminate\Database\Eloquent\Builder; class UserFilter extends Filter { public function name(string $value) { $this->where('name', 'LIKE', $value); } public function email(string $value) { $this->where('email', 'LIKE', "%$value%"); } // Filter relationship public function rank($value) { $this->whereHas('rank', function (Builder $query) use ($value) { $query->where('level', 'like', $value); }); } }
If you want to have more control on which attributes can be filtered, you can add filterable
array to you model:
protected $filterable = [ 'name', 'email' ];
Usage
In your controller, call filter
method and pass the input data to use the filter that you have created.
$users = User::filter($request->all())->get();
Your request query strings could look like this.
/users?name=farhan&rank=novice
You could also pass sort
param to apply sorting for your result.
/users?name=farhan&rank=novice&sort=name,level
Sort desc by adding -
symbol in front of the field name
/users?name=farhan&rank=novice&sort=-name,level
That's it!
Credits
License
MIT. Please see the license file for more information.