使用typeorm映射多对多关系



我想做的是显示与另一个实体相关的所有对象的列表。在此项目中,一个组具有许多用户,一个用户具有许多组。

@Entity('group')
class Group {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
name: string;
@OneToMany(() => GroupMember, groupMember => groupMember.user, {
eager: true,
})
@JoinTable()
members: User[];
@CreateDateColumn()
created_at: Date;
@UpdateDateColumn()
updated_at: Date;
}

用户

@Entity('user')
class User {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
first_name: string;
@Column()
email: string;
@OneToMany(() => GroupMember, groupMember => groupMember.group)
@JoinTable()
groups: Promise<Group[]>;
@CreateDateColumn()
@Exclude()
created_at: Date;
@UpdateDateColumn()
@Exclude()
updated_at: Date;
}

组用户

@Entity('group_member')
class GroupMember {
@PrimaryColumn()
group_id: string;
@ManyToOne(() => Group, { primary: true })
@JoinColumn({ name: 'group_id' })
group: Promise<Group>;
@PrimaryColumn()
user_id: string;
@ManyToOne(() => User, { primary: true })
@JoinColumn({ name: 'user_id', referencedColumnName: 'id' })
user: Promise<User>;
@CreateDateColumn()
created_at: Date;
@UpdateDateColumn()
updated_at: Date;
}

我期望的行为是,在预先加载的情况下,我在搜索用户时获得组列表,并在搜索组时获取用户列表。我知道我不可能双方都"渴望",但首先知道如何只处理一个实体就足够了。

目前,当我搜索一个组时,我得到的只是一个空列表。

我通过以下方式完成了它:

实体组:

@OneToMany(() => GroupMember, groupMember => groupMember.groups)
members: GroupMember[];

实体用户

@OneToMany(() => GroupMember, groupMember => groupMember.groups)
groups: GroupMember[];

实体group_users

@ManyToOne(() => Group, { primary: true })
@JoinColumn({ name: 'group_id' })
groups: Group[];
@ManyToOne(() => User, { primary: true })
@JoinColumn({ name: 'user_id' })
users: User[];

如何在存储库中加载这些实体

findById(group_id: string): Promise<Group | undefined> {
return this.ormRepository.findOne(group_id, {
relations: ['members', 'members.users'],
});
}

最新更新