Prisma graphql updateNode mutation

Я пытаюсь настроить мутацию updateNode в graphql с Prisma, работающим на сервере GraphQL-yoga. Вот ошибка, которую я получаю, когда пытаюсь запустить мутацию:

"Переменная \" $ _ v0_data \ "получила недопустимое значение {data: {name: \" Test \ "}, где: {id: \" cjqulnr0yftuh0a71sdkek697 \ "}}; Поле \" data \ "не определено типом CocktailUpdateInput. \ nПеременная \ "$ _ v0_data \" получила недопустимое значение {data: {name: \ "Test \"}, где: {id: \ "cjqulnr0yftuh0a71sdkek697 \"}}; Поле \ "where \" не определено типом CocktailUpdateInput. "

Вот мой преобразователь мутаций:

const Mutation = {
  async updateCocktail(parent, args, ctx, info) {
    const data = { ...args };
    delete data.id;
    const where = {id: args.id};
    return await ctx.db.mutation.updateCocktail({ data, where }, info);
  },
}

datamodel.prisma:

type Cocktail {
  id: ID! @unique
  name: String!
  info: String
  glass: Glass
  ingredients: [Ingredient]
  steps: [Step]
}

schema.graphql

type Mutation {
  updateCocktail(data: CocktailUpdateInput!, where: CocktailWhereUniqueInput!): Cocktail
}

и, наконец, вот что я пытаюсь выполнить на детской площадке:

mutation{
  updateCocktail(
    where: {id: "cjqulnr0y0tuh0a71sdkek697"},
    data: {
      name: "Test"
    }
  ){
    id
    name
  }
}

person Matt Coady    schedule 25.01.2019    source источник


Ответы (2)


Если я правильно прочитал ваш резолвер, ваш резолвер сделает следующее:

  • Возьмите аргументы и поместите их в данные (без идентификатора)
  • Возьмите идентификатор в аргументах и ​​поместите его туда, где

Но на игровой площадке вы даете следующие аргументы:

args = {
  where: {id: "cjqulnr0y0tuh0a71sdkek697"},
  data: {
    name: "Test"
  }
}

Они уже хорошо сформированы! Это означает, что ваши преобразователи выполнят следующий шаг и построят следующие переменные:

data = {
  where: {id: "cjqulnr0y0tuh0a71sdkek697"},
  data: {
    name: "Test"
  }
}

where = { id: null }

Вы можете исправить это двумя способами:

1 / Не перестраивайте данные и где в резолверах, а просто передавайте аргументы в призму

2 / При вызове ваших мутаций укажите следующие аргументы:

updateCocktail(id: "abc", name: "Test") {...}
person Errorname    schedule 25.01.2019
comment
Спасибо! Пошел с вашим # 1: async updateCocktail (parent, args, ctx, info) {return await ctx.db.mutation.updateCocktail ({args}, info); }, - person Matt Coady; 25.01.2019

Согласно вашей ошибке, проблема должна заключаться в исполнении вашей игровой площадки. Он принимает ваши «где» и «данные» в качестве типов данных.

Вы можете попробовать сделать что-то еще вроде этого:

 mutation UpdateCocktailMutation($data: CocktailUpdateInput!, $where: CocktailWhereUniqueInput!) {
    updateCocktail(data: $data, where: $where) {
      id
      name
    }
  }

а в нижней части игровой площадки у них есть поле переменной запроса. Заполните его вашими переменными данными. Исправьте мою чувствительность к регистру и соглашения об именах, поскольку я, возможно, пропустил некоторые из них.

person nickzor    schedule 25.01.2019