You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeORM中实现Recipe到Tag的单向一对多关联?

实现Recipe到Tag的单向一对多关联(TypeORM)

要把原来用simple-array存Tag ID的方式改成TypeORM的单向一对多关联,按以下步骤修改:

1. 更新Recipe实体

先删掉原来的tags字段(即simple-array类型的列),然后用TypeORM的关联装饰器替代:

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

  @Column({ type: 'varchar' })
  public title!: string;

  @Column({ type: 'varchar' })
  public description!: string;

  // 替换原tags字段,实现单向一对多关联
  @OneToMany(() => Tag, { nullable: true, cascade: ['insert', 'update'] })
  @JoinColumn({ name: 'recipe_id' }) // 在Tag表生成外键列,关联Recipe的id
  public tags: Tag[];
}

2. Tag实体无需修改

因为是单向关联,只需要Recipe知道关联的Tag,Tag不需要感知和Recipe的关系,所以原Tag代码保持不变:

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

  @Column({ type: 'varchar' })
  public name!: string;
}

3. 关键配置说明

  • @OneToMany的选项:
    • nullable: true:允许Recipe不关联任何Tag
    • cascade: ['insert', 'update']:保存/更新Recipe时,自动同步关联的Tag(比如新增Recipe时一起存Tag,这个可选,看业务需求调整)
  • @JoinColumn:指定Tag表中外键列的名称为recipe_id,如果不指定,默认会生成recipeId这样的列名

4. 数据迁移注意事项

  • 原来Recipe表中的tags列(simple-array类型)要删掉
  • 数据库会自动在Tag表新增recipe_id外键列,关联Recipe的id
  • 如果要保留原有数据,得手动把原来Recipe的tags数组里的Tag ID,批量更新到对应Tag的recipe_id字段中

内容的提问来源于stack exchange,提问作者Bowis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:05:41