首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂关系TypeORM / MySQL

问复杂关系TypeORM / MySQL
EN

Stack Overflow用户
提问于 2021-08-08 20:34:34
回答 1查看 154关注 0票数 0

我在MySQL中使用TypeORM,我有两个实体,用户和项目:

代码语言:javascript
复制
@Entity()
class User {
    @PrimaryGeneratedColumn('uuid') 
    id: string;  

    @Column({})
    name: string;
}

@Entity()
class Project {
    @PrimaryGeneratedColumn('uuid') 
    id: string;  

    @Column({})
    name: string;
}

我想添加第三个实体,邀请。邀请由userId和作为关键字的projectId组成。一个用户可以被邀请到多个项目,但每个项目只能邀请一次。我还想存储发送邀请的用户。

代码语言:javascript
复制
@Entity()
class Invitation {
    @PrimaryGeneratedColumn('uuid') 
    id: string;  

    @Column({})
    userID: string;

    @Column({})
    invitedById: string;

    @Column({})
    projectID: string;

    @Column({})
    otherInformations: string;

}

如何使用TypeORM关系装饰器来实现这一点?

谢谢,感谢您的帮助,我对ORM世界还是很陌生的。

周末愉快。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-09 10:34:46

下面是它最后的样子:

代码语言:javascript
复制
@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()装饰器访问用户,这将在多个用户和一个邀请之间创建一个关系。与您的项目实体相同:

代码语言:javascript
复制
  // Invitation.ts
  @ManyToOne(() => User, (user) => user.invitations)
  user: User;

  @ManyToOne(() => Project, (project) => project.invitations)
  project: Project;

在每个实体中,将相反的关系添加到邀请实体

代码语言:javascript
复制
  // 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的添加方式与此相同:

代码语言:javascript
复制
  // Invitation.ts
  @ManyToOne(() => User, (user) => user.invited)
  invitedById: User;

  // User.ts
  @OneToMany(() => Invitation, (invitation) => invitation.invitedById)
  invited: Invitation[];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68704553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档