Установка и настройка
Установка
composer require myprogs/query-builderСервис-провайдер подключается автоматически. Пакету нужны PHP 8.3 или новее и Laravel 12 или 13.
Настройка
Без файла конфигурации всё работает со значениями по умолчанию. Опубликуйте его, если нужно изменить имена параметров, разделитель или обработку неизвестных параметров:
php artisan vendor:publish --tag=query-builder-configФайл — config/query-builder.php. Он также публикуется под тегом, который указан в документации spatie/laravel-query-builder, так что существующие скрипты продолжают работать:
php artisan vendor:publish --tag=laravel-query-builder-configИмена параметров
'parameters' => [
'include' => 'include',
'filter' => 'filter',
'sort' => 'sort',
'fields' => 'fields',
'append' => 'append',
],Имена параметров строки запроса. Измените их, если ваш API уже использует другие имена, например 'filter' => 'where' для ?where[name]=john.
Разделитель
'delimiter' => ',',
'filter_value_splitting_enabled' => true,Разделитель параметров с несколькими значениями: filter[id]=1,2,3, sort=-created_at,name, include=posts,comments. Если filter_value_splitting_enabled равен false, значения фильтров не разбиваются и filter[name]=Smith, John — одно значение. У отдельного фильтра может быть свой разделитель, см. Фильтрация.
Суффиксы агрегатов
'suffixes' => [
'count' => 'Count',
'exists' => 'Exists',
'min' => 'Min',
'max' => 'Max',
'sum' => 'Sum',
'avg' => 'Avg',
],Суффиксы, которые превращают имя связи в include агрегата: include=postsCount, include=postsExists. См. Подгрузка связей.
Неизвестные параметры
'disable_invalid_filter_query_exception' => false,
'disable_invalid_sort_query_exception' => false,
'disable_invalid_include_query_exception' => false,По умолчанию фильтр, сортировка или include, которые эндпоинт не разрешает, выбрасывают исключение (ответ 400). Установите ключ в true, чтобы молча игнорировать такие параметры. Эти ключи действуют на spatie-совместимый API; definitions API всегда сообщает о неизвестных параметрах.
Имена полей
'convert_relation_names_to_snake_case_plural' => true,
'convert_relation_table_name_strategy' => null,
'convert_field_names_to_snake_case' => false,Как сопоставляются ключи и имена в fields[...]:
convert_relation_names_to_snake_case_plural: ключ связи — её имя в snake case во множественном числе,include=userOwner&fields[user_owners]=id. Приfalse— имя в том виде, как оно написано вinclude:fields[userOwner]=id.convert_relation_table_name_strategy: ключ связи — таблица связанной модели, преобразованная поsnake_case,camelCaseилиnone.nullотключает эту настройку.convert_field_names_to_snake_case: преобразовывать запрошенные имена полей, чтобыfirstNameвыбиралfirst_name.
См. Выбор полей.
Переводы
Сообщения об ошибках definitions API переведены на английский и русский и следуют локали приложения. Чтобы изменить формулировки или добавить язык, опубликуйте переводы в lang/vendor/query-builder:
php artisan vendor:publish --tag=query-builder-translationsСм. Ошибки.