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

如何恢复使用gorm通过deletedAt字段软删除的数据

GORM 软删除数据恢复实现方法

首先确认你已为对应模型嵌入gorm.DeletedAt开启了官方默认软删除能力,或使用自定义软删除标记字段,可按以下两种场景实现恢复:

场景1:使用GORM默认软删除(DeletedAt字段)

直接通过Unscoped方法跳过软删除过滤,将对应记录的deleted_at字段更新为NULL即可,示例代码如下:

// 示例模型,嵌入gorm.Model默认包含DeletedAt字段
type Product struct {
  gorm.Model
  Name  string
  Price int
}

// 恢复id为10的已软删除商品记录
db.Unscoped().Model(&Product{}).Where("id = ?", 10).Update("deleted_at", nil)

场景2:使用自定义软删除标记字段

如果你没有用gorm.DeletedAt,而是用如is_deleted这类自定义字段标记删除状态,操作逻辑如下:

  • 调用Unscoped方法跳过软删除查询过滤
  • 将自定义删除标记字段更新为未删除状态即可,示例代码如下:
// 自定义软删除字段的模型示例
type Order struct {
  ID         uint
  OrderNo    string
  IsDeleted  uint `gorm:"column:is_deleted;comment:1=已删除 0=未删除"`
}

// 恢复id为25的已软删除订单记录
db.Unscoped().Model(&Order{}).Where("id = ?", 25).Update("is_deleted", 0)

注意:所有操作软删除数据的请求都必须加Unscoped方法,否则GORM会自动拼接deleted_at IS NULL或者你自定义的删除状态过滤条件,无法匹配到已软删除的记录,恢复操作会执行失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:36:02