Prisma graphql updateNode 突变
Prisma graphql updateNode mutation
我正在尝试在 GraphQL-yoga 服务器上使用 Prisma 运行ning 在 graphql 中设置 updateNode 突变。这是我在尝试 运行 突变时收到的错误:
"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);
},
}
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
}
}
根据你的错误,问题应该出在你的playground执行上。它将您的 "where" 和 "data" 作为数据类型。
您可以尝试做更像这样的事情:
mutation UpdateCocktailMutation($data: CocktailUpdateInput!, $where: CocktailWhereUniqueInput!) {
updateCocktail(data: $data, where: $where) {
id
name
}
}
在你的 playground 底部,他们有一个查询变量字段。
填写您的可变数据。请更正我的区分大小写和命名约定,因为我可能遗漏了部分内容。
如果我没看错你的解析器,你的解析器会执行以下操作:
- 获取参数并将它们放入数据(不带id)
- 取args中的id放到where
但是,在操场上,你给出以下参数:
args = {
where: {id: "cjqulnr0y0tuh0a71sdkek697"},
data: {
name: "Test"
}
}
他们已经成型了!这意味着您的解析器将执行以下步骤并构建以下变量:
data = {
where: {id: "cjqulnr0y0tuh0a71sdkek697"},
data: {
name: "Test"
}
}
where = { id: null }
您可以通过两种方式解决此问题:
1/ 不要重建数据和解析器中的位置,只需将参数传递给 prisma
2/ 当调用你的 mutations 时,给它如下 args:
updateCocktail(id: "abc", name: "Test") {...}
我正在尝试在 GraphQL-yoga 服务器上使用 Prisma 运行ning 在 graphql 中设置 updateNode 突变。这是我在尝试 运行 突变时收到的错误:
"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);
},
}
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
}
}
根据你的错误,问题应该出在你的playground执行上。它将您的 "where" 和 "data" 作为数据类型。
您可以尝试做更像这样的事情:
mutation UpdateCocktailMutation($data: CocktailUpdateInput!, $where: CocktailWhereUniqueInput!) {
updateCocktail(data: $data, where: $where) {
id
name
}
}
在你的 playground 底部,他们有一个查询变量字段。 填写您的可变数据。请更正我的区分大小写和命名约定,因为我可能遗漏了部分内容。
如果我没看错你的解析器,你的解析器会执行以下操作:
- 获取参数并将它们放入数据(不带id)
- 取args中的id放到where
但是,在操场上,你给出以下参数:
args = {
where: {id: "cjqulnr0y0tuh0a71sdkek697"},
data: {
name: "Test"
}
}
他们已经成型了!这意味着您的解析器将执行以下步骤并构建以下变量:
data = {
where: {id: "cjqulnr0y0tuh0a71sdkek697"},
data: {
name: "Test"
}
}
where = { id: null }
您可以通过两种方式解决此问题:
1/ 不要重建数据和解析器中的位置,只需将参数传递给 prisma
2/ 当调用你的 mutations 时,给它如下 args:
updateCocktail(id: "abc", name: "Test") {...}