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;);就像一个回收站,我觉得可以使用软删除。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM