itsmill3rtime / l5-filterable-sortable
一个用于过滤和排序查询构建器结果的特性,基于 Laracasts/Dedicated-Query-String-Filtering。
Requires
- php: >=7.1.3
- laravel/framework: 5.*
Requires (Dev)
- orchestra/testbench: ^3.7
- phpunit/phpunit: ^7.1
- squizlabs/php_codesniffer: 3.*
README
一个用于过滤和排序查询构建器字符串的特性,基于 Laracasts/Dedicated-Query-String-Filtering。
安装
通过 Composer
$ composer require rafflesargentina/l5-filterable-sortable
使用方法
将 FilterableSortableTrait 添加到您的 Eloquent 模型中,以便您可以使用 filter() 和 sorter() 范围。这两个都将子句应用于您必须作为单独的类中的函数定义的 Builder 实例。因此,您必须将 $filters 和 $sorters 属性添加到您的模型中,以设置这些类。
示例
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use RafflesArgentina\FilterableSortable\FilterableSortableTrait; use App\Filters\ArticleFilters; use App\Sorters\ArticleSorters; class Article extends Model { use FilterableSortableTrait; public $filters = ArticleFilters::class; public $sorters = ArticleSorters::class; // ... }
查询过滤器
创建一个扩展 QueryFilters 的类,并定义每个您想用作链式查询过滤器的请求数据的方法名称。您可以在函数内部使用任何逻辑,只要它们返回一个 Builder 实例。
示例
<?php namespace App\Filters; use RafflesArgentina\FilterableSortable\QueryFilters; class ArticleFilters extends QueryFilters { public function title($query) { return $this->builder->where('title', 'LIKE', '%'.$query.'%'); } public function author($query) { return $this->builder->where('user_id', $query); } public function category_id($query) { return $this->builder->where('category_id', $query); } }
您还可以静态访问类方法 getAppliedFilters(),以获取从请求中应用的所有过滤器。
查询排序器
创建一个扩展 QuerySorters 的类,并定义每个您想用作链式查询排序器的请求数据的方法名称。您可以在函数内部使用任何逻辑,只要它们返回一个 Builder 实例。默认顺序和默认 orderBy 必须通过 $defaultOrder 和 $defaultOrderBy 静态属性设置。可选地,您可以通过 $orderKey 和 $orderByKey 静态属性定义 order 和 orderBy 键。
示例
<?php namespace App\Sorters; use RafflesArgentina\FilterableSortable\QuerySorters; class ArticleSorters extends QuerySorters { // These properties are optional: protected static $orderKey = 'orden'; // Fallback value is 'order' protected static $orderByKey = 'ordenarPor'; // Fallback value is 'orderBy' // And there are mandatory: protected static $defaultOrder = 'asc'; protected static $defaultOrderBy = 'title'; public function title() { return $this->builder->orderBy('title', $this->order()); } public function published_at() { return $this->builder->orderBy('updated_at', $this->order()) ->orderBy('title', $this->order()); } }
您还可以访问这些静态类方法来获取排序器类的受保护数据:getOrderKey(),getOrderByKey(),getDefaultOrder(),getDefaultOrderBy()。使用 getAppliedSorters() 获取请求中应用的排序器。或使用 listOrderByKeys() 填充下拉选择器。
您可以从控制器或任何您想要的位置获取过滤和排序的记录,如下所示
// ... $items = Article::filter()->sorter()->paginate(); // ...
就是这样 :)
测试
$ composer test
贡献
请参阅 CONTRIBUTING 和 CONDUCT 以获取详细信息。
安全性
如果您发现任何与安全性相关的问题,请通过电子邮件 mario@raffles.com.ar 而不是使用问题跟踪器。
致谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 以获取更多信息。