| Package Data | |
|---|---|
| Maintainer Username: | raditzfarhan |
| Maintainer Contact: | raditzfarhan@gmail.com (Raditz Farhan) |
| Package Create Date: | 2021-04-01 |
| Package Last Update: | 2024-05-15 |
| Language: | PHP |
| License: | MIT |
| Last Refreshed: | 2025-11-04 15:07:19 |
| Package Statistics | |
|---|---|
| Total Downloads: | 331 |
| Monthly Downloads: | 7 |
| Daily Downloads: | 2 |
| Total Stars: | 0 |
| Total Watchers: | 1 |
| Total Forks: | 0 |
| Total Open Issues: | 0 |
A simple eloquent model filter for Laravel and Lumen.
Via Composer
$ composer require laraditz/model-filter
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'
];
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!
MIT. Please see the license file for more information.