TypeORM Внешний ключ - PullRequest
       82

TypeORM Внешний ключ

1 голос
/ 24 февраля 2020

Я хочу сослаться на module на queue. Таким образом, один queue может иметь несколько modules. Поэтому я просто хочу сохранить id из module в queue.

В соответствии с документацией 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?

1 Ответ

3 голосов
/ 27 февраля 2020

Отношения многие-к-одному / один-ко-многим должны решить вашу проблему,

Это отношение, в котором A содержит несколько экземпляров B, но B содержит только один экземпляр A . В вашем случае A относится к сущности Queue , а B относится к сущности Module

сущности Modules

@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[];
}
...