我想做的是显示与另一个实体相关的所有对象的列表。在此项目中,一个组具有许多用户,一个用户具有许多组。
群
@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'],
});
}