Мутация Prisma graphql updateNode

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

"Variable \"$_v0_data\" got invalid value { data: { name: \"Test\" }, where: { id: \"cjqulnr0yftuh0a71sdkek697\" } }; Field \"data\" is not defined by type CocktailUpdateInput.\nVariable \"$_v0_data\" got invalid value { data: { name: \"Test\" }, where: { id: \"cjqulnr0yftuh0a71sdkek697\" } }; Field \"where\" is not defined by type 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);
  },
}

модель данных.prisma:

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

схема.graphql

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

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

mutation{
  updateCocktail(
    where: {id: "cjqulnr0y0tuh0a71sdkek697"},
    data: {
      name: "Test"
    }
  ){
    id
    name
  }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
2
0
601
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

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

Ответ принят как подходящий

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

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

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

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

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

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

where = { id: null }

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

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

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

updateCocktail(id: "abc", name: "Test") {...}

Спасибо! Пошел с вашим №1: асинхронный updateCocktail(parent, args, ctx, info) { return await ctx.db.mutation.updateCocktail({args}, info); },

Matt Coady 25.01.2019 18:48

Другие вопросы по теме