如何让Prisma API返回数据库服务器当前时间戳?
如何在Prisma中使用数据库服务器时间戳设置字段(无需原生查询)
方案1:在Prisma Schema中设置字段默认值为now()
这是最简洁且符合需求的方案,直接让数据库在创建记录时自动填充服务器当前时间,无需在代码中额外操作,也不会产生额外查询。
修改你的Prisma Schema:
model User { id Int @id @default(autoincrement()) username String @unique email String @unique emailVerified DateTime @default(now()) // 数据库自动用服务器当前时间填充该字段 }
之后创建用户时,无需传入emailVerified字段:
this.user = await prisma.User.create({ data: { username: username, email: email, // 无需手动设置emailVerified,数据库自动处理 }, });
方案2:手动更新时使用dbgenerated()(Prisma 4.16+)
如果需要在更新记录时手动将字段设置为数据库服务器当前时间(而非创建时的默认值),可以使用Prisma提供的dbgenerated()函数,无需编写原生查询:
await prisma.User.update({ where: { id: userId }, data: { emailVerified: prisma.dbgenerated("NOW()"), }, });
额外说明
你之前用$queryRaw获取当前时间的方式会触发两次数据库查询(一次查时间,一次创建记录),而上述方案都是单次查询,且完全基于Prisma API,避免了原生SQL的编写。
另外,new Date()获取的是客户端运行环境的时间,可能和数据库服务器的时间(时区、同步精度)存在差异,而数据库的NOW()是直接取服务器端时间,能保证时间的准确性。
内容的提问来源于stack exchange,提问作者zde
相关产品推荐
相关产品推荐

