【发布时间】:2020-10-25 07:14:42
【问题描述】:
背景
我们的节点应用程序使用 postgres 数据库并通过 TypeORM 与其交互。
我知道如何使用由 postgres 序列生成的主键作为 described here 创建一个表:
import {Entity, PrimaryGeneratedColumn} from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
}
目标
我正在尝试为总是成对创建的对象创建一个表;让我们将对象称为“鞋子”,并假设这对的两个成员是左鞋和右鞋。我希望左鞋和右鞋在我的表中是单独的条目,并且我希望能够轻松地查询成双中的两双鞋。
一种方法是这样的,它会在pairId 上为我提供一个索引,并为每双强制执行一只左鞋和一只右鞋 (TypeORM index docs)
enum Foot {
Left = "Left",
Right = "Right"
}
@Entity()
@Index(["foot", "pairId"], { unique: true })
export class Shoe {
@PrimaryGeneratedColumn()
id: number;
@Column({ type: "enum", enum: Foot })
foot: Foot;
@Column
pairId: number
}
但是,这种方法我仍然负责在pairId 字段中生成值。
问题
有没有办法让 postgres 为我生成 pairId 中的值?也许使用@PrimaryGeneratedColumn 装饰器自动生成的同一种序列?
更新
Response below 在 postgres 中提出了一个可能的解决方案,尽管我仍然需要知道如何通过使用 TypeORM 的 API 或让 TypeORM 在正确的时间运行相关的原始 SQL 命令来做到这一点。
我可以编写一个 TypeORM migration 来运行原始 SQL,但我不确定如何让它在创建表时运行——似乎文档主要预期从命令行运行它们。
【问题讨论】:
标签: node.js postgresql typeorm