Пакет представляет собой удобный инструмент для добавления метода фильтрации к моделям Eloquent в Laravel. При помощи этого пакета можно легко преобразовывать запросы к базе данных на основе данных, полученных от пользователя. Особенность этого пакета заключается в генерации параметров фильтрации на основе структуры модели и схемы соответствующей таблицы в базе данных. Пакет анализирует поля модели, ключи полнотекстового поиска и связи с другими таблицами, чтобы обеспечить максимально удобный процесс фильтрации данных.
Команда для установки:
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).Пожалуйста, смотрите Файл Лицензии для получения дополнительной информации.