postgresql - 类型ORM外键
问题描述
我想将 a 引用module
到 a queue
。所以一个queue
可以有多个modules
。因此,我只想将id
a存储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
应该在哪一列引用?
解决方案
多对一/一对多关系应该可以解决您的问题,
这是一种关系,其中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[];
}
推荐阅读
- codeigniter - CodeIgniter:调用模型时未定义的属性
- ios - iOS GPUImage - 如何替换图像中 R、G 和 B 值超过某个值的所有像素?
- kubernetes - Kubernetes 无法通过 POD IP 访问应用
- javascript - 检查innerHTMl里面是否包含任何HTML标签
- php - laravel中的简单分页?
- javascript - 如何使用 HtmlUnit 在网站中查找或获取触发的 Java 脚本
- scala - 如何在Scala中打印出列表的类型?
- reactjs - 无需重新加载页面在反应 js 中加载所有数据
- db2 - 如何重命名数据库中具有引用完整性维护的表?
- javascript - 回调函数执行多次