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

Posted

技术标签:

【中文标题】使用 Prisma ORM 将日期(仅)列作为字符串检索或映射到字符串而无需时间【英文标题】:Retrieve date(only) column as string or map to string without time using Prisma ORM 【发布时间】:2021-05-12 12:20:42 【问题描述】:

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

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

Prisma 为该列返回一个 javascript Date 对象 (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) ))

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

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

【问题讨论】:

【参考方案1】:

Prisma 客户端正在返回 JavaScript Date 对象 by design,遗憾的是这无法在 Prisma 客户端 API 中配置。

作为一种解决方法,您可以考虑编写一个 middleware 函数,该函数自动将 Date 对象转换为字符串,这样您就无需在每次使用 @987654326 时在应用程序中手动执行此操作@。

如果您希望看到 Prisma 原生支持此功能,请随时 open a feature request 提供您的用例,以便我们的团队对此进行调查。

【讨论】:

谢谢,@Ryan!我明白这是设计使然。如果是仅日期列,我找不到合适的 JavaScript Date 对象。也可能是,用户更喜欢使用他们选择的日期库。将研究中间件。谢谢! 您可以直接将Date 对象传递给任何日期库,例如momentdate-fns。我想知道您是否有任何正在寻找的特定用例。 我知道。而且我了解到我可以编写一个中间件,它会自动为我进行这种转换 :-) 我来自 TypeORM,并且真的很喜欢在模型中用一种声明性的方式来表达这种转换,而不是编写一个中间件。我的用例是我需要存储和处理每天一个值的时间序列。

以上是关于使用 Prisma ORM 将日期(仅)列作为字符串检索或映射到字符串而无需时间的主要内容,如果未能解决你的问题,请参考以下文章

将 excel 列作为文本读取

prisma2 在 prisma 模式中设置长度和列类型

我想在 prisma orm 中使用多个数据库

在 Prisma + GraphQL 中使用字符串列表作为参数的突变

如何使用 django ORM 在 postgres 中仅选择日期部分

如何使用 MongoDB 在 Prisma ORM 中创建类别及其子类别