Я пытаюсь настроить мутацию 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
}
}


Согласно вашей ошибке, проблема должна заключаться в исполнении вашей игровой площадки. Он принимает ваши «где» и «данные» в качестве типов данных.
Вы можете попробовать сделать что-то более похожее на это:
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); },