Nexus Prisma - 如何在全球范围内使用 crud 处理 createdAt 和 updatedAt?
Posted
技术标签:
【中文标题】Nexus Prisma - 如何在全球范围内使用 crud 处理 createdAt 和 updatedAt?【英文标题】:Nexus Prisma - How to handle createdAt and updatedAt with crud globally? 【发布时间】: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
,这很糟糕。
【问题讨论】:
【参考方案1】:感谢您提出问题。
Prisma 可以为您处理模型中的 createdAt
和 updatedAt
列。将@default(now())
和@updatedAt
属性分别添加到createdAt
和updatedAt
列。您可以像这样将列添加到模型中:
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
。以上是关于Nexus Prisma - 如何在全球范围内使用 crud 处理 createdAt 和 updatedAt?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 prisma 2 或 3 和 nexus 模式生成同时生成生成的 crud 和“ondelete 级联”
使用 GraphQL、Nexus 和 Prisma 优化 SQL 查询