Как диагностировать в Laravel lighthouse GraphQL ошибки при определении пагинации?
Ссылка скопирована
По вводным: есть такой код на GraphQl на сервере:
type LabelPrinter { id: ID! title: String! ip: String! port: Int! shop_id: ID! shop: Shop @belongsTo } type LabelPrinterPaginator { data: [LabelPrinter!]! paginatorInfo: PaginatorInfo! } extend type Query { labelPrinters( first: Int, page: Int ): LabelPrinterPaginator @paginate( type: PAGINATOR, model: "App\\Models\\LabelPrinter", defaultCount: 50, maxCount: 50 ) labelPrinter(id: ID! @eq): LabelPrinter @find(model: "App\\Models\\LabelPrinter") }
При запросе с фронта:
query { labelPrinters(first: 50, page: 1) { data { id title } } }
Ошибки типа:
"message": "Cannot query field \"id\" on type \"LabelPrinterPaginator\".",
При выполненииphp artisan lighthouse:print-schemaПо вводным: выяснилось, что GraphQl сам создает тип:
"""A paginated list of LabelPrinterPaginator items.""" type LabelPrinterPaginatorPaginator { """Pagination information about the list of items.""" paginatorInfo: PaginatorInfo! """A list of LabelPrinterPaginator items.""" data: [LabelPrinterPaginator!]! }
По вводным: и присваивает его функции labelPrinters:
labelPrinters( """Limits number of fetched items. Maximum allowed value: 50.""" first: Int = 50 """The offset from which items are returned.""" page: Int ): LabelPrinterPaginatorPaginator
Сейчас ситуация такая: поэтому и ошибка с фронта такая, как указал выше.
Что именно с этим можно сделать?
Нужно решить такую задачу?
Заказать помощь
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Лучший ответ
1
Другие ответы (0)
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопроскомментарий
Вам также может быть интересно
VPN
Как правильно настроить vless для Android TV?
1 ответ
Pyrogram
Как правильно зарегистрировать юзер бота в Telegram?
1 ответ
печатные-платы
Как заставить запускаться программу M3.exe от компании Hanxing AOI в инспекционной машине на Windows 7 Pro?
1 ответ
Telegram
Как диагностировать ошибку с подключением к прокси в мобильном приложении Telegram?
1 ответ

Ошибки пагинации в Laravel Lighthouse GraphQL чаще всего связаны с неправильным типом возвращаемого значения, неверной директивой pagination или конфликтом между Eloquent Builder, Collection и Paginator. Lighthouse ожидает, что поле с пагинацией вернет builder/query, а не уже готовую коллекцию, если используется стандартная директива.
Проверьте schema. Для типового списка лучше использовать директиву
@paginate:type Query { users: [User!]! @paginate(defaultCount: 20) }type Query { users: [User!]! @paginate(defaultCount: 20) }
Если используете resolver, он должен возвращать Query Builder, а не
User::all():public function users($_, array $args) { return User::query() ->where('active', true) ->orderByDesc('id'); }
Плохой вариант для стандартной пагинации:
return User::all(); // это Collection, а не Builder
Также проверьте, какой тип пагинации включен: paginator, connection или simple. Если фронт ожидает edges/pageInfo, а схема возвращает paginatorInfo/data, будет казаться, что пагинация «не работает», хотя запрос просто написан под другой формат.
После правки выполните минимальный запрос в GraphQL Playground/Altair. Если ответ содержит paginatorInfo и data, backend работает. Если ошибка остается, смотрите stack trace в Laravel log: там обычно видно, что именно вернул resolver и какой тип ожидал Lighthouse.