You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeORM QueryBuilder限制关联查询仅返回单条ProductSnapshot记录

如何查询关联产品仅关联最新一条库存快照的客户列表?

需求:查询所有客户(clients)及其关联的产品(products),同时每个产品仅关联一条最新的库存快照记录(ProductSnapshot),要求通过按快照ID降序取第一条的方式实现。

原代码(该代码会返回产品的所有关联快照,不符合需求):

async findClientsProducts() {
  return await this.clientsRepository
    .createQueryBuilder('client')
    .leftJoinAndSelect('client.products', 'product')
    .leftJoinAndSelect('product.productSnapshots', 'productSnapshot')
    .getMany();
}

最优实现方式

使用TypeORM的leftJoinAndMapOne方法,它支持指定仅关联单条记录,同时在关联条件中添加排序逻辑来确保获取最新的快照:

async findClientsProducts() {
  return await this.clientsRepository
    .createQueryBuilder('client')
    .leftJoinAndSelect('client.products', 'product')
    .leftJoinAndMapOne(
      'product.productSnapshot',
      ProductSnapshot,
      'productSnapshot',
      'productSnapshot.product_id = product.id ORDER BY productSnapshot.id DESC',
    )
    .getMany();
}

方案说明

  • leftJoinAndMapOne会将匹配条件的第一条记录映射到product.productSnapshot字段上,确保每个产品仅关联一条快照
  • 通过ORDER BY productSnapshot.id DESC排序,利用自增ID的特性(ID越大则记录越新),保证取到的是产品的最新库存快照

内容的提问来源于stack exchange,提问作者ctilley79

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:39:57