forest-lynx / laravel-filterable-light
Фильтрация модели Eloquent Laravel основе данных модели.
Installs: 10
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/forest-lynx/laravel-filterable-light
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-10-28 09:48:23 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).Пожалуйста, смотрите Файл Лицензии для получения дополнительной информации.