如何为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; } }
关键说明
- 避免递归:必须使用
this.getDataValue('name')获取原始字段值,不能直接用this.name(会再次调用getter导致无限循环) - 扩展逻辑:在getter中可以添加任意自定义处理,比如字符串格式化、默认值补充、关联数据拼接等
- 可选Setter:如果需要自定义字段赋值逻辑,同样可以用
set语法配合setDataValue:set name(value: string) { // 赋值前预处理,比如去除首尾空格 this.setDataValue('name', value.trim()); }
内容的提问来源于stack exchange,提问作者desperado06
相关产品推荐
相关产品推荐

