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

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

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

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

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

【问题讨论】:

    标签: prisma prisma-graphql


    【解决方案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 个字母的随机字符串可能不适合。我决定继续你的第一个答案。
    猜你喜欢
    • 2018-12-12
    • 2012-03-19
    • 1970-01-01
    • 2013-05-09
    • 2010-10-06
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多