如何在NestJS中用TypeORM Query Builder关联实体并仅加载指定列?
在NestJS中使用TypeORM Query Builder关联查询指定字段
要实现通过milestone ID查询数据并仅关联加载user实体的firstName和lastName,可以按以下方式编写Query Builder代码:
async findMilestoneWithUserDetails(milestoneId: number) { return this.milestoneRepository .createQueryBuilder('milestone') // 建立与user实体的关联,不自动加载全部字段 .leftJoin('milestone.users', 'user') // 明确指定需要查询的字段 .select([ 'milestone', // 加载milestone的所有字段 'user.firstName', 'user.lastName' ]) .where('milestone.id = :milestoneId', { milestoneId }) .getOne(); }
关键说明:
- 替换
leftJoinAndSelect为leftJoin:leftJoinAndSelect会默认加载关联实体的所有字段,无法满足仅取部分字段的需求;leftJoin仅创建关联关系,由后续的select控制加载内容。 - 精确指定查询字段:通过
select数组同时声明milestone的全部字段和user的目标字段,确保只获取需要的数据。 - 参数绑定:使用
:milestoneId绑定参数,避免SQL注入问题。 - 返回结果:
getOne()会返回匹配ID的单个milestone实体,其关联的users属性将是仅包含firstName和lastName的用户对象数组。
内容的提问来源于stack exchange,提问作者AhsanAnsar
相关产品推荐
相关产品推荐

