复杂关系 TypeORM / MySQL
Complex relations TypeORM / MySQL
我将 TypeORM 与 MySQL 一起使用,我有两个实体,用户和项目:
@Entity()
class User {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({})
name: string;
}
@Entity()
class Project {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({})
name: string;
}
我想添加第三个实体,邀请。一个邀请由userId和projectId作为key组成。一个用户可以被邀请到多个项目,但每个项目只能被邀请一次。我也想存储发送邀请的用户
@Entity()
class Invitation {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({})
userID: string;
@Column({})
invitedById: string;
@Column({})
projectID: string;
@Column({})
otherInformations: string;
}
如何使用 TypeORM 关系装饰器实现此目的?
谢谢,感谢任何帮助,我对 ORM 世界还是很陌生。
周末愉快。
最后是这样的:
@Entity()
class Invitation {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({})
projectID: string;
@Column({})
otherInformations: string;
// Relations
@ManyToOne(() => User, (user) => user.invitations)
user: User;
@ManyToOne(() => Project, (project) => project.invitations)
project: Project;
@ManyToOne(() => User, (user) => user.invited)
invitedById: User;
}
@Entity()
class Project {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({})
name: string;
@OneToMany(() => Invitation, (invitation) => invitation.project)
invitations: Invitation[];
}
@Entity()
class User {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({})
name: string;
@OneToMany(() => Invitation, (invitation) => invitation.user)
invitations: Invitation[];
@OneToMany(() => Invitation, (invitation) => invitation.invitedById)
invited: Invitation[];
}
我正在尝试解释它,但是为了更清楚地解释关系,您可以观看此视频:https://www.youtube.com/watch?v=8kZ7W-bI5qQ&t=239s&ab_channel=BenAwad (just ignore the graphql part) or read the documentation about relations here: https://typeorm.io/#/relations
所以您的邀请实体是用户和项目之间的多对多关系连接。
您通过 @ManyToOne()
装饰器访问用户,它在许多用户和一个邀请之间创建了一种关系。与您的项目实体相同:
// Invitation.ts
@ManyToOne(() => User, (user) => user.invitations)
user: User;
@ManyToOne(() => Project, (project) => project.invitations)
project: Project;
在每个实体中,您添加与邀请实体相反的关系
// User.ts
@OneToMany(() => Invitation, (invitation) => invitation.user)
invitations: Invitation[];
@OneToMany(() => Invitation, (invitation) => invitation.invitedById)
invited: Invitation[];
// Project.ts
@OneToMany(() => Invitation, (invitation) => invitation.project)
invitations: Invitation[];
注意我们在这里使用 []
因为它是一个 ...ToMany() 关系
invitedById
的加法相同:
// Invitation.ts
@ManyToOne(() => User, (user) => user.invited)
invitedById: User;
// User.ts
@OneToMany(() => Invitation, (invitation) => invitation.invitedById)
invited: Invitation[];
我将 TypeORM 与 MySQL 一起使用,我有两个实体,用户和项目:
@Entity()
class User {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({})
name: string;
}
@Entity()
class Project {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({})
name: string;
}
我想添加第三个实体,邀请。一个邀请由userId和projectId作为key组成。一个用户可以被邀请到多个项目,但每个项目只能被邀请一次。我也想存储发送邀请的用户
@Entity()
class Invitation {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({})
userID: string;
@Column({})
invitedById: string;
@Column({})
projectID: string;
@Column({})
otherInformations: string;
}
如何使用 TypeORM 关系装饰器实现此目的?
谢谢,感谢任何帮助,我对 ORM 世界还是很陌生。
周末愉快。
最后是这样的:
@Entity()
class Invitation {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({})
projectID: string;
@Column({})
otherInformations: string;
// Relations
@ManyToOne(() => User, (user) => user.invitations)
user: User;
@ManyToOne(() => Project, (project) => project.invitations)
project: Project;
@ManyToOne(() => User, (user) => user.invited)
invitedById: User;
}
@Entity()
class Project {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({})
name: string;
@OneToMany(() => Invitation, (invitation) => invitation.project)
invitations: Invitation[];
}
@Entity()
class User {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({})
name: string;
@OneToMany(() => Invitation, (invitation) => invitation.user)
invitations: Invitation[];
@OneToMany(() => Invitation, (invitation) => invitation.invitedById)
invited: Invitation[];
}
我正在尝试解释它,但是为了更清楚地解释关系,您可以观看此视频:https://www.youtube.com/watch?v=8kZ7W-bI5qQ&t=239s&ab_channel=BenAwad (just ignore the graphql part) or read the documentation about relations here: https://typeorm.io/#/relations
所以您的邀请实体是用户和项目之间的多对多关系连接。
您通过 @ManyToOne()
装饰器访问用户,它在许多用户和一个邀请之间创建了一种关系。与您的项目实体相同:
// Invitation.ts
@ManyToOne(() => User, (user) => user.invitations)
user: User;
@ManyToOne(() => Project, (project) => project.invitations)
project: Project;
在每个实体中,您添加与邀请实体相反的关系
// User.ts
@OneToMany(() => Invitation, (invitation) => invitation.user)
invitations: Invitation[];
@OneToMany(() => Invitation, (invitation) => invitation.invitedById)
invited: Invitation[];
// Project.ts
@OneToMany(() => Invitation, (invitation) => invitation.project)
invitations: Invitation[];
注意我们在这里使用 []
因为它是一个 ...ToMany() 关系
invitedById
的加法相同:
// Invitation.ts
@ManyToOne(() => User, (user) => user.invited)
invitedById: User;
// User.ts
@OneToMany(() => Invitation, (invitation) => invitation.invitedById)
invited: Invitation[];