在 GraphQL 中的相关类型之间创建突变
Posted
技术标签:
【中文标题】在 GraphQL 中的相关类型之间创建突变【英文标题】:Create mutation between related types in GraphQL 【发布时间】:2019-06-10 21:03:42 【问题描述】:我正在使用 GraphQL 尝试创建与另一种类型相关的记录。类型为任务和日期
datamodel.graphql:
type Task
id: ID! @unique
content: String!
completed: Boolean!
dateToDo: Day!
type Day
id: ID! @unique
content: String!
tasks: [Task]
我想创建一个任务,以便它具有应该完成的日期的参考(来自 Day 类型)
schema.graphql
type Mutation
createTask(content: String!, completed: Boolean!, dateToDo: ID! ): Task!
我的变异解析器如下所示:
const Mutations =
async createTask(parent, args, ctx, info)
const task = await ctx.db.mutation.createTask(
data:
dateToDo:
connect:
id: args.dateToDo
,
...args
,
info
);
return task;
,
当我运行这个突变来创建任务时:
mutation CREATE_ONE_TASK
createTask(
content: "a new task",
completed: false,
dateToDo: "cjqycv9dtjklr09179y9zfntq")
id
我得到这个错误:
"message": "变量\"$_v0_data\" 得到无效值 \"dateToDo\":\"cjqycv9dtjklr09179y9zfntq\",\"内容\":\"一个新的 task\",\"completed\":false; 预期类型 DayCreateOneWithoutTasksInput 成为 value.dateToDo 处的对象。",
我的问题是:我是否在突变解析器中正确使用了连接? DayCreateOneWithoutTasksInput 到底是什么(我看到它已自动添加到 prisma.graphql 中),我如何使用它来创建与 Day 的 ID 相关的任务?
【问题讨论】:
【参考方案1】:创建任务的突变具有以下形状:
mutation b
createTask(
data:
content: "Task1"
completed: false
dateToDo: connect: id: "cjqzjvk6w000e0999a75mzwpx"
)
id
Prisma 要求的类型 DayCreateOneWithoutTasksInput
是自动生成的,并且是字段 dataToDo
所期望的类型。该名称意味着 Prisma 将接受创建一个 Day
节点但没有字段任务或指定连接的类型的类型。 WithoutTasksInput
部分状态在那里,因为该类型只能嵌套在从任务开始的突变中使用,因此 Prisma 已经具有要填写嵌套 Day
节点上的任务字段的值,而您没有如果您创建一天而不是连接现有的一天,则需要指定它。
如果您使用 Playground,您可以探索包含右侧所有类型的架构。
schema explorer in the playground
希望对您有所帮助!
【讨论】:
非常感谢 Matthias,这个解决方案对我有用。也谢谢你的解释!以上是关于在 GraphQL 中的相关类型之间创建突变的主要内容,如果未能解决你的问题,请参考以下文章