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

如何在TypeORM实体中添加包含对象的icons数组字段?

在TypeORM实体中实现包含对象的icons数组

针对你的需求,有两种常见方案可以实现对应的icons字段,具体选哪种看你的业务场景:

方案1:直接使用JSON类型字段(简单快捷)

如果不需要单独对每个icon做增删改查,只是作为主实体的附属数据存储,直接用JSON类型字段最方便。

首先定义icons元素的类型(可选,TypeScript下能获得更好的类型提示):

interface IconItem {
  icon: string;
  main: boolean;
}

然后在现有实体中添加对应的字段:

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

interface IconItem {
  icon: string;
  main: boolean;
}

@Entity()
export class YourEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  // 添加icons字段,指定类型为json
  @Column('json')
  icons: IconItem[];
}

存储后数据库内的icons字段会以JSON数组形式保存,和你给出的目标结构完全匹配。

方案2:创建关联实体(适合复杂业务场景)

如果需要单独操作每个icon(比如修改某个icon的main状态、单独删除某个icon),更推荐用TypeORM的OneToMany关联关系,把icons拆成独立实体。

步骤1:创建Icon实体

import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from "typeorm";
import { YourEntity } from "./YourEntity";

@Entity()
export class Icon {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  icon: string;

  @Column({ type: 'boolean' })
  main: boolean;

  // 关联到主实体,自动生成外键
  @ManyToOne(() => YourEntity, (yourEntity) => yourEntity.icons)
  parent: YourEntity;
}

步骤2:在主实体中添加OneToMany关联

import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm";
import { Icon } from "./Icon";

@Entity()
export class YourEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  // 关联Icon实体,设置cascade实现联动保存/删除
  @OneToMany(() => Icon, (icon) => icon.parent, { cascade: true })
  icons: Icon[];
}

这种方式下,你可以通过TypeORM的关联查询获取icons列表,也能单独对某个Icon实体执行增删改查操作。

两种方案对比

  • 方案1:开发速度快,数据存储紧凑,适合简单附属数据场景,但无法单独操作数组内的单个元素。
  • 方案2:符合ORM实体设计规范,支持单独操作每个icon,适合业务逻辑复杂的场景,但需要额外维护关联实体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:32:41