首页 > 解决方案 > 带有子对象数组的后突变

问题描述

我已经阅读了我能找到的所有其他 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 编码为字符串并解码。

那里有实际的解决方案吗?这真的不是所有其他语言的噩梦。

标签: graphqlapolloprisma

解决方案


Dependent 类型必须是“输入”类型,也许您将其设置为“类型”?将此添加到您的架构中,它应该可以工作:

// 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
  }
}

但也许你为了简洁而缩短了它?


推荐阅读