【问题标题】:Nexus Prisma - How to handle createdAt and updatedAt with crud globally?Nexus Prisma - 如何在全球范围内使用 crud 处理 createdAt 和 updatedAt?
【发布时间】:2021-04-05 01:21:09
【问题描述】:

我想到的第一件事是在nexusPrisma 选项中调用computedInputs。但这行不通,因为它们需要根据情况进行不同的处理,但在全局范围内:

1. create -> createdAt = now, updatedAt = null
2. update -> createdAt = keep as it is, updatedAt = now

为了让它工作,我需要像这样单独设置 computedInputs:

t.crud.createOneX({
  computedInputs: {
    createdAt: () => DateTime.utc().toString(),
    updatedAt: () => null,
  },
});

t.crud.updateOneX({
  computedInputs: {
    createdAt: () => undefined,
    updatedAt: () => DateTime.utc().toString(),
  },
});

虽然这可能有效,但我无法在嵌套模型上“计算”这些输入。为了防止传递 createdAt/updatedAt,我还必须在该资源上创建另一个 t.crud,而不使用这些时间戳。

最后一个可行的解决方法是根本不使用t.crud,这很糟糕。

【问题讨论】:

    标签: typescript prisma nexus-js


    【解决方案1】:

    感谢您提出问题。

    Prisma 可以为您处理模型中的 createdAtupdatedAt 列。将@default(now())@updatedAt 属性分别添加到createdAtupdatedAt 列。您可以像这样将列添加到模型中:

    model Post {
      id               Int                @id @default(autoincrement())
      title            String
      content          String?
      published        Boolean?           @default(false)
      createdAt        DateTime           @default(now())
      updatedAt        DateTime           @updatedAt
    }
    

    您可以在我们的文档中了解更多关于 @default(now())@updatedAt 的信息。

    如果您遇到任何其他问题和疑问,我很乐意为您提供帮助?

    【讨论】:

    • 我最终手动创建了这些字段。感觉更有控制力?。 PS - 如果你刚刚注册是为了回答我的问题,那么我只想让你知道你是一个传奇人物。
    • 当使用@default(now())@updatedAt在创建时设置2个不同的时间戳,判断一条记录是否已经使用createdAt !== updatedAt更新总是返回true
    猜你喜欢
    • 2016-07-03
    • 2016-04-28
    • 2021-09-07
    • 1970-01-01
    • 2017-01-05
    • 2019-07-19
    • 2018-03-29
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多