【问题标题】:Mapping many to many relations with typeorm用 typeorm 映射多对多关系
【发布时间】:2020-09-27 17:44:13
【问题描述】:

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

组

@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;
}

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

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

【问题讨论】:

    标签: database typescript migration modeling typeorm


    【解决方案1】:

    我是通过以下方式完成的:

    实体组:

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

    实体用户

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

    实体组_用户

      @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'],
        });
      }
    

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2020-06-29
      • 1970-01-01
      相关资源
      最近更新 更多