Prisma graphql updateNode 突变
Posted
技术标签:
【中文标题】Prisma graphql updateNode 突变【英文标题】:Prisma graphql updateNode mutation 【发布时间】:2019-06-18 21:32:03 【问题描述】:我正在尝试使用在 GraphQL-yoga 服务器上运行的 Prisma 在 graphql 中设置 updateNode 突变。这是我尝试运行突变时收到的错误:
"变量\"$_v0_data\"得到无效值数据:名称:\"Test\",其中:id:\"cjqulnr0yftuh0a71sdkek697\";字段\"data\"未定义键入 CocktailUpdateInput。\n变量 \"$_v0_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
【问题讨论】:
【参考方案1】:根据您的错误,问题应该出在您的 Playground 执行中。它将您的“位置”和“数据”作为数据类型。
你可以尝试做更多这样的事情:
mutation UpdateCocktailMutation($data: CocktailUpdateInput!, $where: CocktailWhereUniqueInput!)
updateCocktail(data: $data, where: $where)
id
name
在操场的底部,他们有一个查询变量字段。 填写您的变量数据。请更正我的区分大小写和命名约定,因为我可能遗漏了部分内容。
【讨论】:
【参考方案2】:如果我正确阅读了您的解析器,您的解析器会执行以下操作:
获取 args 并将它们放入数据中(不带 id) 把 args 中的 id 放到 where 里但是,在操场上,您提供以下参数:
args =
where: id: "cjqulnr0y0tuh0a71sdkek697",
data:
name: "Test"
它们已经形成了!这意味着您的解析器将执行以下步骤并构建以下变量:
data =
where: id: "cjqulnr0y0tuh0a71sdkek697",
data:
name: "Test"
where = id: null
您可以通过两种方式解决此问题:
1/ 不要重建数据和解析器中的位置,只需将 args 传递给 prisma
2/ 当调用你的突变时,给它如下参数:
updateCocktail(id: "abc", name: "Test") ...
【讨论】:
谢谢!选择你的 #1: async updateCocktail(parent, args, ctx, info) return await ctx.db.mutation.updateCocktail( args , info); ,以上是关于Prisma graphql updateNode 突变的主要内容,如果未能解决你的问题,请参考以下文章
使用 GraphQL、Nexus 和 Prisma 优化 SQL 查询