【问题标题】:How to use same generated ID in two fields prisma-graphql如何在两个字段 prisma-graphql 中使用相同的生成 ID
【发布时间】:2019-07-23 03:51:24
【问题描述】:

我正在实现一个 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 prisma prisma-graphql


    【解决方案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 层:这在对象 URL 应该是永久的 REST 框架)。

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 2022-11-28
      • 2020-09-23
      • 2020-05-19
      • 2019-12-19
      • 2020-08-18
      • 2021-08-22
      • 1970-01-01
      • 2021-09-05
      相关资源
      最近更新 更多