如何通过 createQueryBuilder 使用转换器 - TypeORM

问题描述 投票:0回答:1

我正在研究 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 格式的过期日期?

nestjs typeorm nest
1个回答
0
投票

当您使用 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();
© www.soinside.com 2019 - 2024. All rights reserved.