如何在两个字段中使用相同的生成的ID pyramida-graphql

时间:2019-03-01 06:30:02

标签: graphql prisma prisma-graphql

我正在实现graphql pyramida数据模型。在这里,我有一个名为BankAccount的类型。我可能还需要更新和删除它们。我将其实现为不可变对象。因此,在更新时,我要添加将现有记录更新为 IsDeleted 并添加新记录。当更新现有记录时,我需要保留上一条记录的ID,以了解更新了哪条记录。所以,我想出了这样的类型

type BankAccount {
  id: ID! @unique
  parentbankAccount: String!
  bankName: String!
  bankAccountNo: String!
  isDeleted: Boolean! @default(value: "false")
}

此处parentBankAccount保留先前BankAccount id 。我在想创建银行帐户时,将parentBankAccount设置为与id相同,因为它没有父母。问题是我不确定是否有可能。我对GraphQL有点陌生。因此,任何帮助将不胜感激。 谢谢

1 个答案:

答案 0 :(得分:1)

在GraphQL中,通常,如果一个对象引用另一个对象,则应直接引用该对象;您不会嵌入其ID。您还可以使字段为空,以支持某些关系不存在的情况。那么,对于该特定字段,看起来就像

type BankAccount {
  parentBankAccount: BankAccount
  ...
}

,只要帐户没有父级,该字段将为null


在API级别,您描述的布局似乎有些怪异。如果我打电话

query MyBankAccount {
  me { accounts { id } }
}

我会找回一些唯一的ID。我以后会打个电话会感到惊讶

query MyBalance($id: ID!) {
  node(id: $id) {
    ... on BankAccount {
      name
      isDeleted
      balance
    }
  }
}

,发现我的帐户已被“删除”,余额是一周前的余额。

在基础数据存储区中使用不可变的对象是有意义的,尤其是出于可审核性的考虑,但这往往不是您可以通过GraphQL API(或大多数其他API层)直接暴露出来的东西: REST框架,对象URL应该是永久的)。