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: | 2024-12-17 03:07:07 |
Package Statistics | |
---|---|
Total Downloads: | 141 |
Monthly Downloads: | 25 |
Daily Downloads: | 2 |
Total Stars: | 0 |
Total Watchers: | 2 |
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.