自动生成的 prisma 增量字段

Posted

技术标签:

【中文标题】自动生成的 prisma 增量字段【英文标题】:Auto generated Incrementing field for prisma 【发布时间】:2019-07-26 19:24:04 【问题描述】:

我在datamodel.prisma 文件中创建了一个名为Order 的实体。那里应该有它自动生成的名为orderRef 的字段。它应该为每个突变调用的 Order 实体的 createOrder 字段自动生成增量值。

对于第一个订单,“orderRef”字段的值应为 OD1,第二个订单的“订单参考”字段的值应为 OD2,依此类推。 例如:

(OD1,OD2,....... OD124,......)

实现这一目标的最简单方法是什么? 是 值应该是字符串,而不是数字。

【问题讨论】:

【参考方案1】:

目前,您不能在 Prisma 中自动生成递增字段。但是,有 an RFC 关于 Field Behavior 将在未来允许这种功能。

目前,有 3 种替代方案:

1/ 创建节点时,进行查询以检索相同类型的最后一个节点,并递增最后一个值。

query 
  things(orderBy: createdAt_desc, first: 1) 
    myId
  


...
newId = myId + 1
...

mutation 
  createThing(data: myId: newId, ... ) 
    ...
  

2/ 创建节点时,进行聚合查询以检索所有相同类型节点的计数,并根据计数递增。(但是,如果您删除以前的节点,您可能会发现自己多次获得相同的值。)

query 
  thingsConnection 
    aggregate 
      count
    
  

...
newId = count + 1
...

mutation 
  createThing(data: myId: newId, ... ) 
    ...
  

3/ 如果您需要用户可读的 id,请考虑创建一个随机的 6 字符长字符串或 using a library。(这将消除对额外查询的需要,但随机性可能会产生令人惊讶的行为)

【讨论】:

谢谢!我也花了相当多的时间来寻找这个问题的答案。我相信您的第一个解决方案是目前可用的最佳解决方案。由于客户可以删除现有订单,我不能使用第二种解决方案,尽管它似乎是最容易实施的一种。我们的系统会有相当数量的订单。 6 个字母的随机字符串可能不适合。我决定继续你的第一个答案。

以上是关于自动生成的 prisma 增量字段的主要内容,如果未能解决你的问题,请参考以下文章

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

使用猫鼬生成自动增量字段?

插入自定义自动增量字段

mySQL 数据库:重置自动增量字段

Prisma generate:要合并的字段配置具有重复的字段名称

具有自动增量的 mongodb 第二个 id 字段