在GraphQL中的相关类型之间创建变异
我正在使用GraphQL尝试创建一个与另一种类型有关系的记录。类型为任务和日期 datamodel.graphql:在GraphQL中的相关类型之间创建变异,graphql,prisma,Graphql,Prisma,我正在使用GraphQL尝试创建一个与另一种类型有关系的记录。类型为任务和日期 datamodel.graphql: type Task { id: ID! @unique content: String! completed: Boolean! dateToDo: Day! } type Day { id: ID! @unique content: String! tasks: [Task] } 我想创建一个任务,以便它有一个应完成日期的引用(从日期类型) sc
type Task {
id: ID! @unique
content: String!
completed: Boolean!
dateToDo: Day!
}
type Day {
id: ID! @unique
content: String!
tasks: [Task]
}
我想创建一个任务,以便它有一个应完成日期的引用(从日期类型)
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
}
}
我得到这个错误:
“消息”:“变量\“$\u v0\u数据\”获取的值无效
{\“dateToDo\”:\“cjqycv9dtjklr09179y9zfntq\”,“content\”:\“一个新的
任务\“,\“已完成\”:false};应为类型
DayCreateOneWithoutTasksInput为值为.dateToDo的对象。“
我的问题是:我是否在变异解析器中正确使用了connect?DayCreateOneWithoutTasksInput(我看到它是在prisma.graphql中自动添加的)到底是什么?我如何使用它来创建一个与一天的ID相关的任务?创建任务的变体具有以下形状:
mutation b {
createTask(
data: {
content: "Task1"
completed: false
dateToDo: { connect: { id: "cjqzjvk6w000e0999a75mzwpx" } }
}
) {
id
}
}
Prisma请求的类型DayCreateOneWithoutTasksInput
是自动生成的,并且是字段dataToDo
所需的类型。该名称意味着Prisma将接受创建一个Day
节点的类型,但没有字段任务或指定连接的类型。不包含任务的部分状态存在,因为该类型只能嵌套在从任务开始的突变中使用,因此Prisma在嵌套的日
节点上的任务字段中已经有了要填充的值,如果创建日而不是连接现有日,则无需指定该值
如果您使用游乐场,您可以探索包含右侧所有类型的模式
希望有帮助 非常感谢Matthias,这个解决方案对我有效。谢谢你的解释!