如何使用TypeORM的leftJoinAndSelect实现多表关联查询?
解决方案
情况1:已在Company实体配置反向关联
先确认你的Company实体中添加了和Invitation对应的一对多反向关联,配置参考如下:
// Company 实体中添加这段配置 @OneToMany(() => Invitation, invitation => invitation.company) public invitations: Invitation[];
修改后的查询代码如下:
this.createQueryBuilder('company') .leftJoinAndSelect('company.companyAdmins', 'companyAdmins') .leftJoinAndSelect('companyAdmins.user', 'user') // 新增关联invitation的语句 .leftJoinAndSelect('company.invitations', 'invitations') .where('company.id = :id', { id }) .getOne();
查询返回的Company对象下会新增invitations字段,挂载该公司关联的所有邀请数据。
情况2:不修改Company实体配置
如果不想额外添加反向关联,可以手动指定关联条件完成查询:
this.createQueryBuilder('company') .leftJoinAndSelect('company.companyAdmins', 'companyAdmins') .leftJoinAndSelect('companyAdmins.user', 'user') // 手动关联Invitation实体,注意替换成你实际导入的Invitation实体名 .leftJoinAndSelect(Invitation, 'invitation', 'invitation.company = company.id') .where('company.id = :id', { id }) .getOne();
如果你的Invitation表中关联Company的外键字段是自定义命名(比如company_id),请把第三个参数里的字段替换为实际的数据库字段名即可。
内容的提问来源于stack exchange,提问作者Shamoon
相关产品推荐
相关产品推荐

