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

TypeORM NestJS迁移中deleted_at字段不存在报错的解决方法

问题原因

你的InfluencerAccount实体配置了@DeleteDateColumn()软删除字段,TypeORM的QueryBuilder会自动为启用软删除的实体附加AND ("influencer"."deleted_at" IS NULL)过滤条件。但在执行该查询的迁移步骤中,deleted_at字段还未被创建(添加字段的迁移还没执行到),因此触发了字段不存在的错误。

解决方案

1. 调整迁移执行顺序

TypeORM按迁移文件的时间戳前缀顺序执行,确保添加deleted_at字段的迁移文件时间戳早于执行查询的迁移文件。修改后者的文件名前缀(时间戳),让它在添加字段的迁移之后执行,这样查询时字段已经存在。

2. 临时禁用软删除自动过滤

如果无法调整迁移顺序,在QueryBuilder中显式关闭软删除的自动过滤逻辑:

const influencers = await queryRunner.manager.createQueryBuilder()
  .from(InfluencerAccount, 'influencer')
  .select(['influencer.id', 'influencer.email'])
  .where({ providerId: IsNull() })
  .disableSoftDelete() // 关闭自动软删除过滤
  .getMany()

也可根据需求使用withDeleted()(会返回所有记录,包括已软删除的)。

3. 改用原生SQL查询

绕开TypeORM实体的自动过滤规则,直接执行原生SQL查询:

const influencers = await queryRunner.query(`
  SELECT "id", "email" FROM "influencer_accounts" WHERE "providerId" IS NULL
`);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:56:08