如何恢复使用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
相关产品推荐
相关产品推荐

