【问题标题】:TypeORM Foreign key类型ORM外键
【发布时间】:2020-02-27 22:19:40
【问题描述】:

我想将module 引用到queue。所以一个queue 可以有多个modules。因此,我只想将moduleid 存储在queue 中。

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

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

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

模块实体

@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 应该在哪一列引用?

【问题讨论】:

    标签: postgresql foreign-keys nestjs typeorm


    【解决方案1】:

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

    这是一种关系,其中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[];
    }
    

    【讨论】:

    • 对不起,我犯了一个错误。一个queue 可以有多个modules 是正确的。你能修改你的代码吗?
    • 再次检查代码。我希望你觉得这个答案有帮助
    • 不,没有 ManyToOne,@OneToMany 就无法存在。如果要使用 OneToMany,则需要 ManyToOne。但是,不需要逆向
    • 你能写一个完整的例子吗
    • 是的,如果你检查数据库,你会发现只保存了队列 ID,而不是整个实体。
    猜你喜欢
    • 2023-03-15
    • 2012-08-04
    • 2020-08-14
    • 1970-01-01
    • 2023-02-24
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多