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

How to use same generated ID in two fields prisma-graphql

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

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

这里的 parentBankAccount 保留了之前 BankAccountid。我在考虑 创建 银行帐户时,将 parentBankAccount 设置为与 id 相同,因为它没有父级。问题是我不确定这是否可能。我对 GraphQL 有点陌生。因此,任何帮助将不胜感激。 谢谢

在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
    }
  }
}

然后发现我的账户是 "deleted" 并且余额是一周前的。

在底层数据存储中使用不可变对象是有道理的,特别是出于可审计性的原因,但这往往不是您可以通过 GraphQL API 直接公开的东西(或大多数其他 API 层:这在 REST 框架中同样令人惊讶,其中对象 URL 应该是永久的)。