Prisma graphql updateNode突变

时间:2019-01-25 03:41:10

标签: graphql prisma prisma-graphql

我正在尝试在GraphQL-yoga服务器上运行Prisma的情况下在graphql中设置updateNode突变。这是我尝试运行突变时收到的错误:

  

“变量\“ $ _ v0_data \”的值无效{{数据:{名称:\“ Test \”},其中:{id:\“ cjqulnr0yftuh0a71sdkek697 \”}};字段\“ data \”的定义不是\ nVariable \“ $ _ v0_data \”的值无效{{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
  }
}

2 个答案:

答案 0 :(得分:1)

如果我正确阅读了您的解析器,则您的解析器会执行以下操作:

  • 获取args并将其放入数据中(不带id)
  • 将ID放入args中,并将其放在哪里

但是,在操场上,您需要提供以下参数:

args = {
  where: {id: "cjqulnr0y0tuh0a71sdkek697"},
  data: {
    name: "Test"
  }
}

它们已经形成了!这意味着您的解析器将按照以下步骤进行操作并构建以下变量:

data = {
  where: {id: "cjqulnr0y0tuh0a71sdkek697"},
  data: {
    name: "Test"
  }
}

where = { id: null }

您可以通过以下两种方法解决此问题:

1 /不要重建数据以及在解析器中的位置,只需将args向下传递给pyramida

2 /当调用您的突变时,请按照以下说明为其提供参数:

updateCocktail(id: "abc", name: "Test") {...}

答案 1 :(得分:0)

根据您的错误,问题应该出在您的游乐场执行上。它将“位置”和“数据”作为数据类型。

您可以尝试做更多类似的事情:

 mutation UpdateCocktailMutation($data: CocktailUpdateInput!, $where: CocktailWhereUniqueInput!) {
    updateCocktail(data: $data, where: $where) {
      id
      name
    }
  }

,在操场的底部,有一个查询变量字段。 填写将您的变量数据。请纠正我的区分大小写和命名约定,因为我可能会错过其中的一部分。