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: 2025-02-28 08:12:21 UTC
README
Пакет представляет собой удобный инструмент для добавления метода фильтрации к моделям 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).Пожалуйста, смотрите Файл Лицензии для получения дополнительной информации.