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

如何为Sequelize模型对象添加getter?以Company模型name字段为例

给Sequelize 5.x模型字段添加Getter的解决方案

在Sequelize 5.21的类式模型(使用装饰器)中,不需要在装饰器内定义getter,直接在类中通过JavaScript的get语法即可实现,核心是用getDataValue访问原始字段值避免递归:

完整示例代码

export default class Company extends Model<Company> {
  @PrimaryKey
  @Default(DataType.UUIDV4)
  @Column(DataType.UUID)
  id: string;

  @Default(DataType.NOW)
  @Column
  created_at: Date;

  @Default(0)
  @Column
  deleted_at: Date;

  @AllowNull(false)
  @Column(DataType.STRING(25))
  name: string;

  @Default(true)
  @Column
  active: boolean;

  // 自定义name字段的getter
  get name(): string {
    // 获取数据库存储的原始值,避免触发getter自身递归
    const originalName = this.getDataValue('name');
    // 这里添加你的自定义逻辑,比如格式化、拼接等
    return originalName ? originalName.trim().toUpperCase() : originalName;
  }
}

关键说明

  1. 避免递归:必须使用this.getDataValue('name')获取原始字段值,不能直接用this.name(会再次调用getter导致无限循环)
  2. 扩展逻辑:在getter中可以添加任意自定义处理,比如字符串格式化、默认值补充、关联数据拼接等
  3. 可选Setter:如果需要自定义字段赋值逻辑,同样可以用set语法配合setDataValue:
    set name(value: string) {
      // 赋值前预处理,比如去除首尾空格
      this.setDataValue('name', value.trim());
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:01:25