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

Sequelize TypeScript下HasOne/HasMany关联的logs、size字段无法存储问题

问题原因及解决方案

导致关联字段logs、size无法保存的常见原因及对应修复方案如下:

  • 原因1:create方法未开启关联保存配置
    sequelize默认不会在创建主模型时自动保存关联模型数据,需要手动指定要关联创建的模型。
    修复方案:修改服务层的create调用,添加include参数:
try {
  return this.errorModel.create(saveData, {
    include: [Log, Size]
  })
} catch (err) {
  throw new HttpException('Error model save', HttpStatus.NOT_ACCEPTABLE);
}
  • 原因2:关联模型的外键配置错误
    当前Log、Size模型将外键errorId同时设置为了自增主键,该配置会导致关联逻辑失效:errorId是指向Error表_id的外键,不能作为自身的自增主键,数据库会自动生成自增的errorId值,无法和Error表的记录关联。
    修复方案:给Log、Size模型添加独立的主键字段,移除errorId的主键、自增、唯一装饰器:
// Log模型修改示例
@Table({modelName: 'logs'})
export class Log extends Model<Log, ILog> {
  // 新增独立主键
  @PrimaryKey
  @AutoIncrement
  @Column({type: DataType.INTEGER})
  id: number

  // errorId仅作为外键
  @ForeignKey(() => Error)
  @Column({type: DataType.INTEGER})
  errorId: number

  @Column
  x: number

  @Column
  y: number

  @BelongsTo(() => Error)
  error: Error
}

Size模型按照同样逻辑修改即可。

  • 原因3:服务层未处理size字段
    当前服务层代码仅对logs字段做了赋值处理,未将请求传入的size字段同步到saveData中,导致size数据根本没有传入create方法。
    修复方案:在服务层添加size字段的赋值逻辑:
if (errorDto.logs) saveData.logs = errorDto.logs.map(({x, y}: {x: number, y:number}) => ({x, y}))
// 新增size处理逻辑
if (errorDto.size) saveData.size = errorDto.size
  • 原因4:size字段结构不匹配
    你描述的size格式为{key: ""},但ICreateSize接口和Size模型要求的字段是width、height、vHeight,结构不匹配也会导致数据无法正常写入。需要确保传入的size字段符合模型定义的字段结构。

内容的提问来源于stack exchange,提问作者Mr. Byte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:45:06