使用 Prisma ORM 将日期(仅)列作为字符串检索或映射到没有时间的字符串

som*_*ser 8 date typescript prisma

我正在使用 Prisma2 ( prisma @prisma/client)。

在我的底层 postgres 数据库中,我有一列类型date,即只有日期而没有时间。

Prisma为本列返回一个JavascriptDate对象(https://www.prisma.io/docs/concepts/components/preview-features/native-types/native-types-mappings#datetime),它也携带时间信息。

序列化后,我最终得到了完整的 ISO 日期和时间字符串。但是,我只想返回日期部分(时间部分始终为 00:00:00)。

目前我这样做:

return await prisma.entity.findMany().map(e => ({ ...e, date: e.date.toISOString().substring(0,10) }))
Run Code Online (Sandbox Code Playgroud)

我想摆脱手动映射,因为我必须为每个查询重复它,并且对于嵌套查询等,映射变得更加复杂。

Prisma 是否支持添加到模型(并自动执行)的某种转换(例如使用类转换器)?我在文档中没有找到任何内容。或者我可以教 Prisma 以字符串形式返回该列,而不是 Date 对象吗?

Rya*_*yan 4

Prisma 客户端按设计返回 JavaScriptDate对象,遗憾的是,这无法在 Prisma 客户端 API 中进行配置。

作为一种解决方法,您可以考虑编写一个中间件函数来自动将Date对象转换为字符串,这样您就不需要在每次使用Date.

如果您希望看到 Prisma 本身支持此功能,请随时根据您的用例提出功能请求,以便我们的团队可以对此进行研究。