使用 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!我明白这是设计使然。如果是仅日期列,我找不到合适的 JavaScriptDate
对象。也可能是,用户更喜欢使用他们选择的日期库。将研究中间件。谢谢!
您可以直接将Date
对象传递给任何日期库,例如moment
或date-fns
。我想知道您是否有任何正在寻找的特定用例。
我知道。而且我了解到我可以编写一个中间件,它会自动为我进行这种转换 :-) 我来自 TypeORM,并且真的很喜欢在模型中用一种声明性的方式来表达这种转换,而不是编写一个中间件。我的用例是我需要存储和处理每天一个值的时间序列。以上是关于使用 Prisma ORM 将日期(仅)列作为字符串检索或映射到字符串而无需时间的主要内容,如果未能解决你的问题,请参考以下文章
在 Prisma + GraphQL 中使用字符串列表作为参数的突变