我正在研究 NestJS。我想通过 createQueryBuilder 转换我的日期时间。
对于存储库,我可以轻松地在实体上使用变压器,如下所示,
@Column({
name: 'expire_date',
transformer: {
to: (value:Date) => value,
from: (value:Date) => value == null ? value : moment(value,'YYYY-MM-DD HH:mm:ss').toDate()
}
})
expireDate: Date;
如果我从存储库获取数据,
const data = await this.produtRepository({where: { id: id }});
expireDate列会自动为我转换日期时间格式。
但我还找不到任何方法通过 queryBuilder 来做到这一点。
这是我的 queryBuilder 代码示例,
let product = await this.produtRepository.createQueryBuilder('product')
.innerJoin('product.category', 'category')
.select([
'product.id AS "productId"',
'product.expireDate AS "expireDate"'
])
.getRawMany();
产品结果的过期日期将为
“到期日期”:“2023-10-23T17:07:20.000Z”
如何像存储库那样获取 YYYY-MM-DD HH:mm:ss 格式的过期日期?
当您使用 createQueryBuilder 检索数据时,结果集将作为原始数据返回,因此,不会应用实体定义中指定的转换器。如果您想使用 TypeORM 的 createQueryBuilder 直接在查询中将 expireDate 格式化为 YYYY-MM-DD HH:mm:ss 格式,则需要将其作为查询逻辑的一部分进行处理。实现此目的的一种方法是使用查询中数据库的本机日期格式化函数。
let product = await this.produtRepository.createQueryBuilder('product')
.innerJoin('product.category', 'category')
.select([
'product.id AS "productId"',
'DATE_FORMAT(product.expireDate, "%Y-%m-%d %H:%i:%s") AS "expireDate"'
])
.getRawMany();