gurgentil / eloquent-filters
一个Laravel包,可以轻松为Eloquent模型添加查询过滤器
1.0.1
2021-01-15 22:10 UTC
Requires
- php: ^7.2
- illuminate/support: ^7.0|^8.0
Requires (Dev)
- orchestra/testbench: ^5.0|^6.0
README
此包提供了一种简单且优雅的方法,在不将模型类变成庞大的God对象的情况下,为Eloquent模型添加查询过滤器。
设置完成后,如果您正在构建一个API,例如,您可以简单地将以下代码片段添加到控制器中
User::filter($request->get('filter'))->get();
现在请求 /api/users?filter[name]=John
并开始乐趣。
安装
使用composer安装此包
composer require gurgentil/eloquent-filters
用法
创建一个继承自 Gurgentil\EloquentFilters\FilterBuilder
的过滤器构建器。这是您将注册Eloquent模型的所有过滤器的地方。
namespace App\Filters; use Gurgentil\EloquentFilters\FilterBuilder; class UserFilters extends FilterBuilder { protected $availableFilters = []; }
将 Gurgentil\EloquentFilters\Filterable
特性添加到您的模型类中。特性将在 App\Filters
中查找模型的过滤器构建器。
创建过滤器
运行artisan命令
php artisan make:filter Users/NameFilter
在您之前创建的构建器中注册过滤器
namespace App\Filters; use App\Filters\Users\NameFilter; use Gurgentil\EloquentFilters\FilterBuilder; class UserFilters extends FilterBuilder { protected $availableFilters = [ 'name' => NameFilter::class, ]; }
最后但同样重要的是,在 NameFilter
中实现您的查询
namespace App\Filters\Users; use Gurgentil\EloquentFilters\Filter; use Illuminate\Database\Eloquent\Builder; class NameFilter implements Filter { /** * Apply filter. * * @return Builder */ public function apply(Builder $builder, $value) { return $builder->where('name', $value); } }
您可以通过将过滤器列表传递给 filter
方法来对模型执行过滤查询
User::filter([ 'name' => 'John', ])->get();
测试
composer test
更新日志
请参阅 CHANGELOG 以获取有关最近更改的更多信息。
贡献
请参阅 CONTRIBUTING 以获取详细信息。
鸣谢
许可
MIT许可(MIT)。请参阅 许可文件 以获取更多信息。