forest-lynx/laravel-filterable-light

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

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

This package is auto-updated.

Last update: 2024-04-28 06:27:57 UTC


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).Пожалуйста, смотрите Файл Лицензии для получения дополнительной информации.