定制 forest-lynx/laravel-filterable-light 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

forest-lynx/laravel-filterable-light

Composer 安装命令:

composer require forest-lynx/laravel-filterable-light

包简介

Фильтрация модели Eloquent Laravel основе данных модели.

README 文档

README

Software License

Laravel PHP

Пакет представляет собой удобный инструмент для добавления метода фильтрации к моделям Eloquent в Laravel. При помощи этого пакета можно легко преобразовывать запросы к базе данных на основе данных, полученных от пользователя. Особенность этого пакета заключается в генерации параметров фильтрации на основе структуры модели и схемы соответствующей таблицы в базе данных. Пакет анализирует поля модели, ключи полнотекстового поиска и связи с другими таблицами, чтобы обеспечить максимально удобный процесс фильтрации данных.

Table of Contents

Установка

Команда для установки:

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`);
//...

Параметр метода должен принимать Illuminate\Http\Request с полем filters или массив вида:

[
    //свойства модели по которым допустима фильтрация
    '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 без изменений.

Типы сравнений:

в запросе SQL тип Описание
= = Равно
!= <> Не равно
< < Меньше
<= <= Меньше или равно
> > Больше
>= >= Больше или равно
~ LIKE Находится в искомом значении
!~ NOT LIKE Исключая находящиеся в искомом значении
i IN Находится ли значения в пределах набора
!i NOT IN За исключением значений находящихся наборе
>< BETWEEN Находятся в диапазоне
!>< NOT BETWEEN Исключая диапазон
0 NULL Нулевое значение
!0 IS_NOT_NULL Не нулевое значение

значения с типом LIKE и NOT LIKE оборачиваются в %

Лицензия

Лицензия MIT (MIT).Пожалуйста, смотрите Файл Лицензии для получения дополнительной информации.

forest-lynx/laravel-filterable-light 适用场景与选型建议

forest-lynx/laravel-filterable-light 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 10 次下载、GitHub Stars 达 0, 最近一次更新时间为 2023 年 07 月 27 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 forest-lynx/laravel-filterable-light 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 forest-lynx/laravel-filterable-light 我们能提供哪些服务?
定制开发 / 二次开发

基于 forest-lynx/laravel-filterable-light 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 10
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 9
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-07-27