gpt4 book ai didi

postgresql - TypeORM 外键

转载 作者:行者123 更新时间:2023-12-02 19:40:08 24 4
gpt4 key购买 nike

我想将一个模块引用到一个队列。所以一个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

最佳答案

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

这是一种关系,其中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: 'queues' })
queues: Queue;

}

队列实体

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

@OneToMany(() => Module, Module => Module.queues, {
onUpdate: 'CASCADE',
onDelete: 'CASCADE' })
modules: Module[];
}

关于postgresql - TypeORM 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60378494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com