forest-lynx / laravel-filterable-light
基于 Eloquent Laravel 模型数据的模型过滤。
Requires
- php: ^8.0
- illuminate/contracts: ^9.0 || ^10.0
- illuminate/database: ^9.0 || ^10.0
- illuminate/support: ^9.0 || ^10.0
- illuminate/testing: ^9.0 || ^10.0
Requires (Dev)
- orchestra/testbench: ^8.5
This package is auto-updated.
Last update: 2024-09-28 07:21:32 UTC
README
此包提供了一个方便的工具,可以将过滤方法添加到 Laravel 中的 Eloquent 模型。通过此包,可以轻松地将基于用户数据的数据库查询转换为查询。该包的特点是根据模型结构和对应数据库表的架构生成过滤参数。包分析模型的字段、全文搜索键和其他表的关系,以确保数据过滤过程尽可能方便。
目录
安装
安装命令
composer require forest-lynx/laravel-filterable-light
配置
如果需要,请执行以下命令发布配置文件:
php artisan vendor:publish --tag=filterable-light-config
或者,您可以在配置文件(.env)中设置包的变量。
配置说明
FILTERABLE_L_MODELS_PATH
负责模型命名空间。默认为 "App\\Models\\
"
FILTERABLE_L_SKIP_MODELS
默认排除的模型数组。
FILTERABLE_L_SKIP_FIELDS_DEFAULT
默认不参与过滤的模型属性数组。
适用于所有模型。
FILTERABLE_L_INCLUDE_FIELDS_RELATED
(逻辑值)是否从过滤条件中排除与其它表有关联的模型属性。排除这些字段遵循 Laravel 的命名约定。
将 Trait
添加到需要应用过滤的模型中
//... use ForestLynx\FilterableLight\Trait\HasFilterable; class Card extends Model{ use HasFilterable; }
模型可访问以下属性
//... protected $filtering = true; protected $filtering_fields = []; protected $filtering_fields_hidden = [] //...
属性 $filtering
(布尔值)负责对模型应用过滤以及生成过滤条件。默认为 true
。该属性可以在模型中不声明。
属性 $filtering_fields
参与过滤的字段数组,其形式为。该属性可以在模型中不声明,此时从模型的 $fillable
属性中获取可过滤的字段信息。
属性 $filtering_fields_hidden
定义了从过滤中排除的模型属性。
包使用 Attribute
进行额外的过滤条件设置。
对于与其他模型有关联的方法,可以使用 FilteringBlocked
属性来排除方法,使其不在过滤条件中。示例用法
//... use ForestLynx\FilterableLight\Attributes\FilteringBlocked; class Product extends Model{ use HasFilterable; //... #[FilteringBlocked] public function price(): HasOne { //...
应用
//... Card::filter(`$filters`); //...
方法参数应接受包含 filters
字段的 Illuminate\Http\Request
或类似数组。
[ //свойства модели по которым допустима фильтрация 'name' => '=:пирожок', //1.тип операции сравнения формирования поискового запроса (до:) //2. искомое(ый) значение(я) ... //для свойств допустима группировка на выходе запрос where (description ... AND amount ...) 0 => [ 'description' => '~:Описание пирожка', 'amount' => '!=:10' ], //связь с другими моделями 'related' => [ //имя связи 'properties' => [ //свойства у связанной модели по которым допустима фильтрация 'amount': '><:52|75', ... ], ... ] ]
允许使用完整或部分数组的确切表示法。例如
[ //группировка свойств '1.image': '0:' '1.amount': 'i:23,52,16' 'related' => [ //частичная точечная нотация 'properties.amount': '><:52|75', ... ] ]
查询字符串示例
https://site.com?filters[name]==:пирожок&filters[related.properties.amount]=><:52|75
如果参数为空或不存在,则返回未更改的 Builder
。
比较类型
类型为
LIKE
和NOT LIKE
的值被包裹在%
中。
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 以获取更多信息。