forest-lynx/laravel-filterable-light

基于 Eloquent Laravel 模型数据的模型过滤。

v0.0.1 2023-07-28 04:59 UTC

This package is auto-updated.

Last update: 2024-09-28 07:21:32 UTC


README

Software License

Laravel PHP

此包提供了一个方便的工具,可以将过滤方法添加到 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

比较类型

类型为 LIKENOT LIKE 的值被包裹在 % 中。

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 以获取更多信息。