自动生成的 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