我在MySQL中使用TypeORM,我有两个实体,用户和项目:
@Entity()
class User {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({})
name: string;
}
@Entity()
class Project {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({})
name: string;
}我想添加第三个实体,邀请。邀请由userId和作为关键字的projectId组成。一个用户可以被邀请到多个项目,但每个项目只能邀请一次。我还想存储发送邀请的用户。
@Entity()
class Invitation {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({})
userID: string;
@Column({})
invitedById: string;
@Column({})
projectID: string;
@Column({})
otherInformations: string;
}如何使用TypeORM关系装饰器来实现这一点?
谢谢,感谢您的帮助,我对ORM世界还是很陌生的。
周末愉快。
发布于 2021-08-09 10:34:46
下面是它最后的样子:
@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 (忽略graphql部分)或阅读以下关于关系的文档: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[];https://stackoverflow.com/questions/68704553
复制相似问题