【问题标题】:Prisma graphql updateNode mutationPrisma graphql updateNode 突变
【发布时间】: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
  }
}

【问题讨论】:

    标签: graphql prisma prisma-graphql


    【解决方案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); },
      猜你喜欢
      • 2019-09-09
      • 2019-06-11
      • 2018-07-23
      • 2020-04-15
      • 2020-01-31
      • 1970-01-01
      • 2020-10-09
      • 2018-10-10
      • 2020-11-24
      相关资源
      最近更新 更多