Вот как это выглядит в итоге:
@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()
, который создает связь между многими пользователями и одним приглашением. То же самое с вашей сущностью Project:
// 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[];