duuany / eloquent-filters
一个最简单的 Eloquent 查询过滤器包。
2.2
2022-05-26 23:08 UTC
Requires
- illuminate/support: ^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- orchestra/database: ^3.4
- orchestra/testbench: ^3.4
- phpunit/phpunit: ^9.0
README
一个最简单的 Laravel Eloquent 模型 URL 查询过滤器包。
安装
您可以通过 composer 进行安装
Laravel 5.5+
$ composer require duuany/eloquent-filters
###Laravel 5.4 或更高版本
$ composer require duuany/eloquent-filters:1.1
将服务提供者添加到 config/app.php 文件中
Duuany\EloquentFilters\EloquentFiltersServiceProvider::class
可选,您可以发布配置文件以覆盖包配置
$ php artisan vendor:publish --provider="Duuany\EloquentFilters\EloquentFiltersServiceProvider" --tag="config"
用法
在您的模型中添加以下 HasFilters 特性
class User extends Model { use HasFilters; }
在您的应用文件夹的任何位置创建一个 UserFilter 类。过滤器类定义了一组适用的过滤器。对于添加到过滤器数组中的每个过滤器,您都需要实现过滤器逻辑。
您可以通过 artisan 命令创建过滤器
$ php artisan make:filter FilterName
class UserFilter extends EloquentFilters { protected $filters = [ 'order', 'popular', .... ]; protected function order($column) { return $this->builder->orderBy($column, 'desc'); } }
您可以为您的过滤器传递多个参数,如下所示
protected function order($column, $sort = 'desc') { return $this->builder->orderBy($column, $sort); }
当向过滤器传递多个参数时,请确保在查询字符串中使用分隔符。
http://myurl.dev?order=id:asc
默认分隔符是 :
,但您可以通过重写 protected $delimiter
属性来修改它。
示例
class UserFilter extends EloquentFilters { protected $delimiter = '|'; ... }
在查询字符串...
http://myurl.dev?order=id|asc
... 请注意,不要使用特殊的查询字符串字符,如分隔符。
魔法调用
可选,您可以省略 ->builder
// this... return $this->builder->orderBy($column, $sort); // can be called like this... return $this->orderBy($column, $sort);
现在在您的应用程序中,您可以使用以下方式使用过滤器
class UserController extends Controller { public function index(UserFilter $filters) { $users = User::filter($filters)->get(); } }
当用户访问 URL https:///?order=id 时,将应用 order 过滤器到 User 模型。
测试
$ ./vendor/bin/phpunit
致谢
- Jeffrey Way
- Jorge Junior aka jjquady
- 许多咖啡杯 :D
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。