Создать мутацию между связанными типами в GraphQL - PullRequest
0 голосов
/ 16 января 2019

Я использую 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
  }
}

Я получаю эту ошибку:

"message": "Переменная \" $ _ v0_data \ "получила недопустимое значение {\ "dateToDo \": \ "cjqycv9dtjklr09179y9zfntq \", \ "content \": \ "новый задача \ ", \" выполнено \ ": false}; ожидаемый тип DayCreateOneWithoutTasksInput для объекта в value.dateToDo. ",

Мои вопросы: правильно ли я использую соединение в распознавателе мутаций? И что за хрень DayCreateOneWithoutTasksInput (я вижу, что он был автоматически добавлен в prisma.graphql) и как я могу использовать его для создания Задачи, которая имеет отношение к ID Дня?

1 Ответ

0 голосов
/ 16 января 2019

Мутация для создания задачи имеет следующую форму:

mutation b {
  createTask(
    data: {
      content: "Task1"
      completed: false
      dateToDo: { connect: { id: "cjqzjvk6w000e0999a75mzwpx" } }
    }
  ) {
    id
  }
}

Тип DayCreateOneWithoutTasksInput Запрашиваемая Prisma генерируется автоматически и является ожидаемой для поля dataToDo.Имя означает, что Prisma будет принимать тип, который создает один узел Day, но не имеет полевых задач, или тип, который определяет соединение.Состояния части WithoutTasksInput присутствуют, потому что тип может использоваться только во вложенной мутации, когда вы начинаете с задачи, поэтому Prisma уже имеет значение, которое необходимо заполнить для поля задач на вложенном узле Day, и вы ненужно указать его, если вы создаете день вместо того, чтобы подключить существующий.

Если вы используете игровую площадку, вы можете исследовать схему, содержащую все типы справа.

проводник схемы на игровой площадке

Надеждачто помогает!

...