Пост-мутация с дочерним массивом объектов

Я читал все сообщения SO / Hackernoon / Graph.cool об этом, которые я мог найти, но это все еще полностью ускользает от меня.

Скажем, у меня есть тип под названием Person, связанный с Dependant:

type Person {
  id: ID! @unique
  createdAt: DateTime!
  updatedAt: DateTime!
  firstName: String
  middleName: String
  lastName: String
  dependants: [Dependant!]!
}

Я просто, абсолютно не могу опубликовать объект Person с его дочерними элементами и заставить сервер не умереть на мне. Логический путь не работает, потому что в жизни нет ничего проще:

mutation CREATE_PERSON (
    $firstName: String,
    $middleName: String,
    $lastName: String,
    $dependants: [Dependant!]!,
)

returns "Variable "$dependants" cannot be non-input type "[Dependant!]!"

Мне сказали объединить исходный тип, связанное поле и связанный тип в «PersondependantsDependant»:

mutation CREATE_PERSON (
    $firstName: String,
    $middleName: String,
    $lastName: String,
    $dependants: [PersondependantsDependant!]!,
)

return "Unknown type "PersondependantsDependant"

но это, очевидно, не работает, и его не показывают на детской площадке или в чем-то еще. Другие говорят, что это невозможно, и просто JSON-кодирует его в строку и декодирует.

Есть ли реальное решение? Это действительно не кошмар на любом другом языке.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
0
870
1

Ответы 1

Зависимый тип должен быть «входным» типом, возможно, вы настроили его как «тип»? Добавьте это в свою схему, и он должен работать:

// This will work:
input Dependent {
  someField: string!
}

// This will _NOT_ work:
type Dependent {
  someField: string!
}

Также кажется, что ваш запрос на мутацию неполный. В настоящее время он принимает только входные параметры, но запроса на мутацию нет ... Он должен выглядеть примерно так:

mutation CREATE_PERSON (
  $firstName: String,
  $middleName: String,
  $lastName: String,
  $dependents: [dependents!]!,
) {
  createPerson(
    firstName: $firstName
    middleName: $middleName
    lastName: $lastName
    dependents: $dependents
  ) {
    # return fields
    id
    firstName
  }
}

Но, может быть, вы сократили его для краткости?

Другие вопросы по теме