我正在使用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
}
}
我收到此错误:
“消息”:“变量\” $ _ v0_data \“的值无效 {\“ dateToDo \”:\“ cjqycv9dtjklr09179y9zfntq \”,\“内容\”:\“新 task \“,\” completed \“:false};预期的类型 DayCreateOneWithoutTasksInput设为value.dateToDo处的对象。“,
我的问题是:我在突变解析器中正确使用connect吗?到底是DayCreateOneWithoutTasksInput是什么(我看到它自动添加到了pyramida.graphql中),以及如何使用它来创建与Day的ID有关系的Task?
答案 0 :(得分:3)
创建任务的变异具有以下形状:
mutation b {
createTask(
data: {
content: "Task1"
completed: false
dateToDo: { connect: { id: "cjqzjvk6w000e0999a75mzwpx" } }
}
) {
id
}
}
Prisma要求的类型DayCreateOneWithoutTasksInput
是自动生成的,并且是字段dataToDo
所期望的类型。该名称意味着Prisma将接受创建一个Day
节点但没有现场任务的类型或指定连接的类型。 WithoutTasksInput
部分的状态在那里,是因为该类型只能嵌套在从任务开始的突变中使用,因此Prisma已经具有嵌套Day
节点上的task字段的值并且如果您创建日期而不是连接现有的日期,则无需指定日期。
如果您使用Playground,则可以浏览右侧包含所有类型的架构。
schema explorer in the playground
希望有帮助!