ensi / laravel-query-builder-helpers
This package contains extensions for laravel-query-builder
Installs: 9 986
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- php: ^8.1
- laravel/framework: ^9.0 || ^10.0 || ^11.0
- spatie/laravel-query-builder: ^5.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.9
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0 || ^7.0 || ^8.1
- orchestra/testbench: ^6.0||^7.0||^8.0||^9.0
- pestphp/pest: ^1.21 || ^2.0
- pestphp/pest-plugin-laravel: ^1.1 || ^2.0
- phpstan/extension-installer: ^1.3
- phpunit/phpunit: ^9.0||^10.0||^11.0
- spaze/phpstan-disallowed-calls: ^2.16
This package is auto-updated.
Last update: 2024-05-07 11:01:08 UTC
README
Пакет laravel-query-builder-helpers представляет из себя набор классов, упрощающих создание доступных фильтров для пакета laravel-query-builder от Spatie.
Установка
Пакет доступен к установке через composer:
composer require ensi/laravel-query-builder-helpers
Использование
Создание фильтра
Создание фильтров осуществляется путем применения статического метода make и дальнейшего вызова цепочки методов-фильтров.
use Ensi\QueryBuilderHelpers\Filters\StringFilter; StringFilter::make('name')->contain()->endWith()->empty();
В данный момент доступны следующие классы-фильтры:
- StringFilter
- NumericFilter
- DateFilter
- PlugFilter (заглушка, для передачи дополнительных параметров в другой фильтр)
- ExtraFilter (описан в разделе "Дополнительные фильтры")
Каждый тип фильтра имеет свой суффикс, который добавляется к названию, переданному в метод make. Например, по умолчанию фильтр empty имеет суффикс _empty, а фильтр gt - _gt:
NumericFilter::make('rank')->exact()->empty()->gt()->lt();
В результате мы получим четыре варианта фильтрации, доступных при поисковых запросах.
- rank
- rank_empty
- rank_gt
- rank_lt
Передача фильтров в метод allowedFilters
Для передачи полученных фильтров в метод allowedFilters пакета от Spatie потребуется деструктуризация массива.
$this->allowedFilters([ ...NumericFilter::make('rank')->exact()->empty()->gt()->lt(), ]);
Дополнительные фильтры
Класс ExtraFilter используется вышеупомянутыми классами, но также может быть задействован отдельно.
Из полезных методов можно выделить:
- nested (регистрирует набор вложенных фильтров)
- predefined (создает предопределенный фильтр, заключающий в себе сложную фильтрацию)
- и другие
...ExtraFilter::nested('page', [ ...InputFilter::make('title', 'page_title')->empty()->exact()->contain(), ]),
Конфигурация
В файле config.php можно настроить применяемые суффиксы. Там же можно настроить like-оператор, используемый в поисковых запросах.
'suffixes' => [ 'equal' => '', 'greater' => '_gt', 'less' => '_lt', ... ], 'like_operator' => 'LIKE',
Тестирование
composer test
По умолчанию тестирование проходит с использованием in-memory DataBase SQLite. SQLite не поддерживает часть функций, например: json_contains. Для тестирования этих функций укажите в phpunit.xml.dist в секции php конфигурацию с подключением к другой базе данных. При написании таких тестов используете функцию skip для пропуска тестов с использованием подключения по умолчанию.
->skip(fn () => DB::getDriverName() === 'sqlite', 'db driver does not support this test');