Skip to content

forest-lynx/laravel-filterable-light

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Фильтрация для моделей Laravel

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages