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