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)。请参阅 许可证文件 以获取更多信息。