gorm中实现软删除和硬删除

gorm中实现软删除和硬删除

如果您的模型包含一个gorm.DeletedAt字段(包含在 中gorm.Model),它将自动获得软删除能力!

调用 时Delete,记录不会从数据库中删除,但 GORM 会将DeletedAt的值设置为当前时间,并且不再使用正常的 Query 方法查找数据。

软删除

// 用户 ID 为 `111`
 db.Delete(&user) 
// 更新用户 SET deleted_at="2013-10-29 10:23" WHERE id = 111;

// 批量删除
db.Where( "age = ?" , 20 ).Delete(&User{}) 
// UPDATE users SET deleted_at="2013-10-29 10:23" WHERE age = 20;

// 查询时软删除的记录会被忽略
db.Where( "age = 20" ).Find(&user) 
// SELECT * FROM users WHERE age = 20 AND deleted_at IS NULL;
查找软删除记录
db.Unscoped().Where( "age = 20" ).Find(&users) 
// SELECT * FROM users WHERE age = 20;

硬删除:永久删除

db.Unscoped().Delete(&order) 
// DELETE FROM orders WHERE id=10;

注意:

如果程序中,使用了默认的gorm生成数据库,使用了软删除,那么在执行gorm的查询结果中,被软删除的数据是不能被查询到的;

但是,在数据库工具中,使用软删除的数据,执行t-sql语句可以被查询到,判断的标志是,deleted_at有时间(deleted_at IS NULL;);就像一个回收站,我觉得可以使用软删除。

posted @ 2021-12-03 14:41  成强  阅读(3032)  评论(0编辑  收藏  举报