TypeOrm 同一实体的多对多

rt_*_*rt_ 7 postgresql typeorm

我试图弄清楚如何创建一个用户实体,该实体与包含其他用户实体的朋友列上的关系。通过 userId 对的联接表进行联接。这种作品:

@Entity('user')
export class User {
  @PrimaryGeneratedColumn('uuid')
  id: string;
  @ManyToMany(
    () => User,
    (user) => user.friends
  )
  @JoinTable()
  friends: User[];
}
Run Code Online (Sandbox Code Playgroud)

它确实创建了一个关系,我可以用 id 填充连接表并检索数据,但这似乎只是一种方法。

这是连接表:

 userId_1 | userId_2 
------------+------------
Run Code Online (Sandbox Code Playgroud)

我所说的一种方式是指链接似乎来自 userId_1 -> userId_2 而不是两种方式。对此有什么办法可以改进吗?我希望能够根据单行条目从任一侧获取关系

小智 6

您需要添加关系的另一端。我使用“追随者”而不是“朋友”,因为这清楚地反映了每种关系的方向。

这样你就可以做类似的user.followers事情user.following

@ManyToMany(() => User, (user) => user.following)
@JoinTable()
followers: User[];
    
@ManyToMany(() => User, (user) => user.followers)
following: User[];
Run Code Online (Sandbox Code Playgroud)