首页 > 解决方案 > 类型ORM外键

问题描述

我想将 a 引用module到 a queue。所以一个queue可以有多个modules。因此,我只想将ida存储modulequeue.

根据 Typeorm 的文档,我应该以这种方式实现这种关系:

@ManyToOne(type => Module)
@JoinColumn({ name: "currentModuleId" })
module: Module;

我只想提供id一个module,而不是一个模块对象。所以我想出了这个解决方案:

模块实体

@Entity()
export class Module extends BaseEntity {
  @PrimaryColumn({ unique: true })
  public id: string;
}

队列实体

@Entity()
export class Queue extends BaseEntity {
  @PrimaryGeneratedColumn('uuid')
  public id: string;

  @OneToOne(() => Module)
  @JoinColumn({ name: 'currentModuleId' })
  currentModuleId: string;
}

这行得通,但我不太确定这是一个防错解决方案。我应该如何实现外键queue

另外:Typeorm 如何知道currentModuleId应该在哪一列引用?

标签: postgresqlforeign-keysnestjstypeorm

解决方案


多对一/一对多关系应该可以解决您的问题,

这是一种关系,其中A包含 B 的多个实例B仅包含A 的一个实例。在您的情况下,A 指的是Queue实体,B 指的是Module实体

模块实体

@Entity()
export class Module extends BaseEntity {
  @PrimaryColumn({ unique: true })
  public id: string;

  @ManyToOne(() => Queue, (Queue) => 
           Queue.id, { onUpdate: 'CASCADE', onDelete: 'CASCADE' })
  @JoinColumn({ name: 'ueues' })
  queues: Queue;

}

队列实体

@Entity()
export class Queue extends BaseEntity {
  @PrimaryGeneratedColumn('uuid')
  public id: string;
      @OneToMany(() => Module, Module => 
           Module.queues, { onUpdate: 'CASCADE', onDelete: 'CASCADE' })
      modules: Module[];
}

推荐阅读