Prisma的自动生成递增字段

6
我在我的 datamodel.prisma 文件中创建了一个名为 Order 的实体。其中应该有一个自动生成的字段叫做 orderRef,对于 Order 实体的每次变更调用,它都应该有一个自动生成的递增值用于 createOrder 字段。
对于第一个订单,'orderRef' 字段的值应为 OD1,第二个订单的 'orderRef' 字段应为 OD2,以此类推。 例如: (OD1、OD2、....... OD124、.....)
最简单的方法是什么?是的,该值应该是字符串而不是数字。
1个回答

4

目前,在Prisma中不能拥有自动生成的增量字段。但是,有一个有关Field Behavior的RFC ,将来可以允许这种功能。

目前有三种替代方案:

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, ... }) {
    ...
  }
}

如果你需要一个可读的用户ID,考虑创建一个随机的6个字符长的字符串或者使用库。(这样可以避免额外查询,但是随机性可能会有意想不到的行为)

谢谢!我也花了相当多的时间搜索这个问题的答案。我认为你的第一个解决方案是目前最好的解决方案。由于客户可能会删除现有订单,我不能使用第二个解决方案,尽管它似乎是最容易实现的。而且我们的系统将有大量的订单。6位随机字符串可能不适合。我决定继续采用你的第一个答案。 - Dulara Malindu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接