【问题标题】:How to model a followers system using TypeORM Entities如何使用 TypeORM 实体建模追随者系统
【发布时间】:2019-09-21 16:57:21
【问题描述】:

我正在使用 typeORM 创建一个快速应用程序来帮助将我的对象映射到我的数据库。我希望创建一个追随者系统。我有一个用户实体的基本布局,如下所示。但是,这会创建两个连接表。我希望只有一个表符合“user_follows_user”,其中userId_1 跟随userId_2。我希望能够记录每个用户的关注者数量和关注者数量。这可能吗?我仍然没有完全理解我的代码中发生了什么。

import { Entity, PrimaryGeneratedColumn, Column, ManyToMany, JoinTable, RelationCount } from 'typeorm';

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    firstName: string;

    @Column()
    lastName: string;

    @Column()
    email: string;

    @Column()
    password: string;

    @Column()
    bio: string;

    @ManyToMany( type => User, user => user.followers )
    @JoinTable()
    following: User[]

    @ManyToMany( type => User, user => user.following )
    @JoinTable()
    followers: User[]

    @RelationCount((user: User) => user.followers)
    followersCount: number;

    @RelationCount((user: User) => user.following)
    followingCount: number;
}

运行我的代码后,我的数据库架构如下所示: https://imgur.com/XfXjfGq

如上所述,我觉得只需要一张桌子。尽管我对使用此 ORM 的追随者系统的其他合理模式持开放态度。

【问题讨论】:

    标签: node.js postgresql express typeorm


    【解决方案1】:

    您的代码可以工作,但将追随者放在一个数组中可能会在一段时间后变得非常难看。 查询数组更难,也需要更长的时间。而且您无法保留一些重要信息,例如关注您的架构的时间。
    您想要做的是,创建另一个实体并保留追随者的 ID 和被追随者。喜欢这个:

    import { Entity, Column, CreateDateColumn } from 'typeorm';
    
    @Entity()
    export class Subscription {
    
      @Column()
      userId: number;
    
      @Column()
      folowingId: number;
    
      @CreateDateColumn()
      createdAt: Date;
    
    }
    

    现在可以通过查询此实体轻松获取关注者或所有关注者的数量。

    【讨论】:

      猜你喜欢
      • 2021-06-13
      • 2020-03-06
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 2019-07-03
      • 2017-12-08
      • 2013-03-15
      • 2011-09-07
      相关资源
      最近更新 更多