rafflesargentina / l5-filterable-sortable
一个用于过滤和排序查询构建器结果的特性,基于 Laracasts/Dedicated-Query-String-Filtering。
Requires
- php: >=7.2.0
- laravel/framework: 6.*
Requires (Dev)
- orchestra/testbench: ^4
- phpunit/phpunit: ^8.5
- squizlabs/php_codesniffer: 3.*
This package is not auto-updated.
Last update: 2024-09-25 21:17:18 UTC
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
创建一个继承自 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
创建一个继承自 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)。请参阅 许可证文件 获取更多信息。