在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

我正在使用GraphQL尝试创建一个与另一种类型有关系的记录。类型为任务和日期

datamodel.graphql:

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,这个解决方案对我有效。谢谢你的解释!