gpt4 book ai didi

node.js - 类型ORM。两个外键在一个表中引用相同的主键

转载 作者:行者123 更新时间:2023-12-05 03:53:31 25 4
gpt4 key购买 nike

在我的项目中,我希望具有双向 ManyToOne - OneToMany 关系,其中两个外键引用相同的主键。在我的例子中,它将是一个表“匹配”,其中包含表“玩家”中的两个玩家(player1Id 和 player2Id 是 FK)。我希望能够获得特定球员参加的所有比赛,并为比赛分配一名球员。在 Match 实体中我猜它应该是这样的:

@Entity()
export class Match {

@PrimaryGeneratedColumn()
id!: number;

@ManyToOne((type) => Player)
@JoinColumn({ name: "player1Id", referencedColumnName: "id" })
player1: Player;

@ManyToOne((type) => Player)
@JoinColumn({ name: "player2Id", referencedColumnName: "id" })
player2: Player;
//some other properties...

但由于我必须在 @OneToMany() 装饰器中指示一个反面实体,那么它在 Player 实体中应该是什么样子?有什么方法可以在 TypeORM 中映射这样的关联吗?在一个表中有两个 FK 引用另一个表中的同一个主键是一种好的和常见的做法吗?一般来说,我是 NodeJS 和 webdev 的新手。感谢您的帮助。

最佳答案

在我看来,您在这里拥有多对多关系。 Match 有很多玩家(即使你只需要两个,这你总是可以扩展玩家的数量),并且一个玩家可以参加很多场比赛。

@Entity()
export class Match {

@PrimaryGeneratedColumn()
id!: number;

@ManyToMany((type) => Player, (player) => player.matches)
players: Player[];

//some other properties...

玩家实体。如果确实使关系成为多对多关系,则必须将 @JoinTable() 放在其中一个实体上。

@Entity()
export class Player{

@PrimaryGeneratedColumn()
id!: number;

@ManyToMany((type) => Match, (match) => match.players)
@JoinTable()
matches: Match[];

//some other properties...

关于node.js - 类型ORM。两个外键在一个表中引用相同的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61510569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com