1.定义模型
type User struct {
gorm.Model
Name string
Email string
// 新增deleted_at字段记录数据是否被删除
DeletedAt gorm.DeletedAt `gorm:"index"`
}
2.通过BeforeDelete钩子,自动维护DeletedAt字段
func (u *User) BeforeDelete(tx *gorm.DB) (err error) {
// 每次删除数据会执行这里的代码,自动设置DeletedAt字段的值
return tx.Model(u).Update("DeletedAt", gorm.DeletedAt{
Time: time.Now(),
Valid: true,
}).Error
}
3.开启软删除
db, err := gorm.Open(mysql.New(mysql.Config{
DSN: "user:password@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local",
}), &gorm.Config{
// 开启软删除
SoftDelete: true,
})