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 突变的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 prisma (graphql) 集群

模式拼接两个远程 Prisma/GraphQL 模式

使用 GraphQL、Nexus 和 Prisma 优化 SQL 查询

prisma 可以实现与 graphql 相同的功能吗?

NestJS 中与 GraphQL 的 Prisma 自关系

将 GraphQL/Prisma 字段设为私有/无法查询