在 GORM 中,Unscoped
是一个用于绕过或操作软删除(Soft Delete)机制的方法。GORM 默认支持软删除,当你的模型包含 DeletedAt
字段时,调用 Delete
方法会触发软删除(更新 DeletedAt
字段而非真正删除数据)。Unscoped
允许你绕过这一行为,直接操作被软删除的数据或忽略软删除逻辑。
1. Unscoped
的用途
Unscoped
主要用以下几种场景:
- 查询被软删除的记录:默认情况下,GORM 的查询会过滤掉已软删除的记录(
DeletedAt IS NULL
),使用Unscoped
可以包含这些记录。 - 物理删除记录:通过
Unscoped
执行真正的数据库删除(而非更新DeletedAt
)。 - 关联操作:在操作关联模型时,控制是否包含软删除的记录。
- 恢复软删除的记录:通过
Unscoped
将DeletedAt
重置为NULL
。
2. 基本用法
定义模型
type User struct {
gorm.Model // 内嵌 gorm.Model&