【发布时间】:2019-12-25 20:14:34
【问题描述】:
我想在我的应用中实现用户黑名单。
简单用例:登录用户可以将另一个用户“列入黑名单”,因此我需要user.blacklist 一个包含每个列入黑名单的用户 ID 的数组。
我的后端是用 TypeOrm 制作的,这是我的用户实体:
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
@IsEmail()
email: string;
@Column()
@Length(3, 21)
pseudo: string;
@Column()
@Length(4, 100)
password: string;
// ...
@OneToMany(() => Blacklist, (blacklist) => blacklist.user)
blacklist: Blacklist[];
@ManyToMany(() => Blacklist)
@JoinTable()
blacklists: Blacklist[];
}
如你所见,我尝试了一些东西,这是我的黑名单实体:
export class Blacklist {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => User, (user) => user.blacklist)
user: User;
@ManyToMany(() => User, (user) => user.blacklists)
users: User[]
}
这确实有效。但我不会让它这样,因为它非常丑陋,非常糟糕。
我的(mysql)数据库如下所示:
| user | blacklist | user_blacklists_blacklist |
|------------|-------------|---------------------------|
| id | id | userId |
| pseudo | userId | blacklistId |
| ... | | |
我更喜欢这个:
| user | blacklist |
|------------|------------------|
| id | id |
| pseudo | userId |
| ... | blacklistedUserId|
至少我不太关心的数据库,但与黑名单实体中的用户有 2 个关系,我想这要简单得多..
我尝试使用@Tree,但不起作用,我希望只有孩子将孩子伪装成黑名单用户,但无论如何它都会创建父母。
这是我第一次使用 TypeOrm,一些建议/直接帮助将非常感激。
【问题讨论】: