如何在TypeORM中获取包含多对多关联的全量数据表数据?
解决TypeORM多对多关联查询时关联字段不返回的问题
首先得确保你的多对多实体关联配置是正确的,这是查询能返回关联数据的前提:
1. 确认实体关联配置
在User实体(关联的拥有方)中,需要正确配置@ManyToMany和@JoinTable:
import { Entity, PrimaryGeneratedColumn, Column, ManyToMany, JoinTable } from 'typeorm'; import { Role } from './role.entity'; @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() username: string; // 多对多关联配置:拥有方必须添加@JoinTable @ManyToMany(() => Role, role => role.users) @JoinTable() roles: Role[]; }
对应的Role实体也要配置反向关联:
import { Entity, PrimaryGeneratedColumn, Column, ManyToMany } from 'typeorm'; import { User } from './user.entity'; @Entity() export class Role { @PrimaryGeneratedColumn() id: number; @Column() name: string; @ManyToMany(() => User, user => user.roles) users: User[]; }
2. 查询时加载关联数据
TypeORM没有Sequelize那种include: {all: true}的写法,需要显式指定要加载的关联关系,有两种常用方式:
方式一:使用Repository的find方法,通过relations选项指定
直接在find的配置参数里添加relations数组,填入要加载的关联字段名:
const users = await this.usersRepository.find({ relations: ['roles'], });
如果需要同时加载多个关联,直接在数组里添加对应字段即可,比如relations: ['roles', 'otherRelation']。
方式二:使用QueryBuilder(更灵活,适合复杂查询)
通过leftJoinAndSelect方法关联并查询关联表的数据:
const users = await this.usersRepository.createQueryBuilder('user') .leftJoinAndSelect('user.roles', 'role') .getMany();
3. 可选:全局默认加载关联(谨慎使用)
如果希望所有查询User时都自动加载roles,可以在@ManyToMany装饰器中添加eager: true选项,但这种方式会增加所有查询的性能开销,只适合必须全局加载的场景:
@ManyToMany(() => Role, role => role.users, { eager: true }) @JoinTable() roles: Role[];
内容的提问来源于stack exchange,提问作者nevermind1727
相关产品推荐
相关产品推荐

