在 GraphQL 中的相关类型之间创建突变
Create mutation between related types in GraphQL
我正在使用 GraphQL 尝试创建与另一种类型相关的记录。类型是 Task 和 Day
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": "Variable \"$_v0_data\" got invalid value
{\"dateToDo\":\"cjqycv9dtjklr09179y9zfntq\",\"content\":\"a new
task\",\"completed\":false}; Expected type
DayCreateOneWithoutTasksInput to be an object at value.dateToDo.",
我的问题是:我是否在突变解析器中正确使用了连接? DayCreateOneWithoutTasksInput 到底是什么(我看到它已自动添加到 prisma.graphql 中),我如何使用它来创建与一天的 ID 相关的任务?
创建任务的突变具有以下形状:
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
希望对您有所帮助!
我正在使用 GraphQL 尝试创建与另一种类型相关的记录。类型是 Task 和 Day
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": "Variable \"$_v0_data\" got invalid value {\"dateToDo\":\"cjqycv9dtjklr09179y9zfntq\",\"content\":\"a new task\",\"completed\":false}; Expected type DayCreateOneWithoutTasksInput to be an object at value.dateToDo.",
我的问题是:我是否在突变解析器中正确使用了连接? DayCreateOneWithoutTasksInput 到底是什么(我看到它已自动添加到 prisma.graphql 中),我如何使用它来创建与一天的 ID 相关的任务?
创建任务的突变具有以下形状:
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
希望对您有所帮助!