LaravelPackages.net
Acme Inc.
Toggle sidebar
forest-lynx/laravel-filterable-light

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

10
0
v0.0.1
About forest-lynx/laravel-filterable-light

forest-lynx/laravel-filterable-light is a Laravel package for фильтрация модели eloquent laravel основе данных модели.. It currently has 0 GitHub stars and 10 downloads on Packagist (latest version v0.0.1). Install it with composer require forest-lynx/laravel-filterable-light. Discover more Laravel packages by forest-lynx or browse all Laravel packages to compare alternatives.

Last updated

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

Star History Chart