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
相关产品推荐
相关产品推荐

