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

Posted

技术标签:

【中文标题】如何在两个字段 prisma-graphql 中使用相同的生成 ID【英文标题】:How to use same generated ID in two fields prisma-graphql 【发布时间】: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 有点陌生。因此,任何帮助将不胜感激。 谢谢

【问题讨论】:

【参考方案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 框架)。

【讨论】:

以上是关于如何在两个字段 prisma-graphql 中使用相同的生成 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sencha Touch 中使文本字段不可编辑

如何在 swift 中使文本字段功能在 tableview 中

如何在 PHPMyAdmin 中使 MySql 中的字段自动递增?

表单提交后如何在html中使文本字段不可编辑

如何在 GridView 中使 Access 主键可编辑

如何在Rails中使数据库字段为只读?