【问题标题】:TypeORM many to many relation to selfTypeORM 与自我的多对多关系
【发布时间】:2021-12-23 09:24:16
【问题描述】:

我想在 TypeORM 中建立一个朋友系统。如果用户 A 是用户 B 的朋友,那么用户 B 也是用户 A 的朋友。不像追随者系统,这种关系只有一种方式。

这是我的用户类的一部分。

    @ManyToMany(() => User, user => user.friends, {
        cascade: ['insert', 'update']
    })
    @JoinTable({ name: 'user_friends' })
    friends: User[];

这是我的桌子的样子:

当我从第一列的用户那里查询朋友时,一切正常。但是当我从第二列中的用户那里查询朋友时,它不会在第一列中显示用户。我想这种关系只是一种方式。怎么弄成两种方式?找了很久,没找到有用的解决办法。

提前感谢您的帮助!

【问题讨论】:

  • 这是图形数据库的展示示例。他们总是表明关系有多么困难,而图表有多么容易。实际上,当 C 是 B 的朋友并因此是 A 的间接朋友时更多。
  • @TheFool 好的,但我现在想使用关系数据库
  • @TheFool 我不想玩间接关系。我现在只想列出用户之间的两种直接关系。
  • 看看这个answer

标签: node.js typescript postgresql nestjs typeorm


【解决方案1】:

我在我的 NestJS + TypeORM + MySQL 应用程序中遇到了同样的问题。也许我错过了一些东西,但我很确定,没有办法只使用 find 方法和 relations 选项。

最后我决定使用自定义 MySQL 查询来实现。您可以使用 typeorm getConnection().query() 函数:

    SELECT * FROM (
        SELECT * FROM user_friends F
            LEFT JOIN user U ON F.userId_1 = U.id
                WHERE F.userId_2 = ?
        UNION
        SELECT * FROM user_friends F
             LEFT JOIN user U ON F.userId_2 = U.id
                WHERE F.userId_1 = ?
        ) all_friends
    GROUP BY id;

我认为,同样的查询应该适用于 PostgreSQL。

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 2020-06-29
    • 2022-01-02
    • 1970-01-01
    • 2022-11-13
    • 2020-09-01
    • 2020-12-03
    • 2020-09-27
    • 2020-10-10
    相关资源
    最近更新 更多