GraphQL - переменная не определена операцией - PullRequest
0 голосов
/ 14 января 2019

Моя схема GraphQL определяется как:

type Query {
    getEntity(id: Int!): Entity
    getEntityUsers(entityId: Int!, statusId: Int): [User]
}

type Entity {
    id: Int!
    name: String!
    email: String!
    logo: String
    createdAt: DateTime!
    updatedAt: DateTime!

    users(statusId: Int): [User]
}

Как видите, у меня есть два способа получить пользователей для объекта Entity. В данный момент для моего запроса работает метод getEntityUsers root resolver. Этот запрос выглядит так:

query getEntityUsers($entityId: Int!, $statusId: Int) {
        users: getEntityUsers(entityId: $entityId, statusId: $statusId) {
            ...
        }
    }

.. с переменными:

{
    entityId: 1,
    statusId: 2
}

Есть ли способ заставить другой путь работать, позволив мне перейти на statusId? Прямо сейчас запрос выглядит так:

query getEntity($id: Int!) {
        entity: getEntity(id: $id) {
            ...
            users (statusId: 2) {
                ... 
            }
        }
    }

Это очевидно работает с переменными:

{
    id: 1
}

Но что, если я захочу использовать этот второй метод и изменить statusId? Можно ли передать statusId, если он не определен в корневом преобразователе?

Я пробовал запрос:

query getEntity($id: Int!) {
        entity: getEntity(id: $id) {
            ...
            users (statusId: $statusId) {
                ... 
            }
        }
    }

.. с переменными:

{
    id: 1,
    statusId: 2
}

Но я просто получаю сообщение об ошибке: Variable "$statusId" is not defined by operation "getEntity". Есть ли еще способ сделать это?

1 Ответ

0 голосов
/ 14 января 2019

Каждая операция (запрос или мутация) должна явно определять любые переменные, которые вы используете внутри этой операции. Поэтому, если у вас есть переменная с именем $statusId, тип этой переменной должен быть указан как часть определения вашей операции:

query getEntity($id: Int!, $statusId: Int) {
  # your selection set here
}

Если эти переменные используются в вашем запросе (будь то на корневом уровне или где-либо еще), не имеет значения - они всегда должны определяться как часть определения вашей операции.

...