刪除一條記錄時,刪除物件需要指定主鍵,否則會觸發 批量 delete,例如:
db.debug().where("id = ?", 6).delete(new(user))
// delete from `users` where id = 6
db.debug().delete(user{}, 5)
// delete from `users` where `users`.`id` = 5
// 根據主鍵刪除乙個或多個
db.debug().delete(&user{}, int)
// delete from `users` where `users`.`id` in (11, 12)
對於刪除操作,gorm 支援 beforedelete、afterdelete hook,在刪除記錄時會呼叫這些方法
func (u *user) beforedelete(tx *gorm.db) (err error)
func (u *user) afterdelete(tx *gorm.db) (err error)
如果指定的值不包括主屬性,那麼 gorm 會執行批量刪除,它將刪除所有匹配的記錄
db.debug().where("name = ?", "dawang").delete(&user{})
// delete from `users` where name = 'dawang'
db.debug().delete(new(user), "name like ?", "%wang%")
// delete from `users` where name like '%wang%'
如果在沒有任何條件的情況下執行批量刪除,gorm 不會執行該操作,並返回 where conditions required 錯誤,對此,你必須加一些條件,或者使用原生 sql,或者啟用 allowglobalupdate 模式,例如:
db.delete(&user{}).error // where conditions required
db.where("1 = 1").delete(&user{})
// delete from `users` where 1=1
db.exec("delete from users")
// delete from users
db.session(&gorm.session).delete(&user{})
// delete from users
如果您的模型包含gorm.deletedat欄位(包含在gorm.model中),它將自動獲得軟刪除功能!呼叫delete時,記錄不會從資料庫中刪除,但gorm會將deletedat的值設定為當前時間,並且使用常規查詢方法無法再查詢資料
db.debug().delete(new(user), 21)
// update `users` set `deleted_at`='2021-11-22 15:25:02.646' where `users`.`id` = 23 and `users`.`deleted_at` is null
var user user
db.first(&user, 21)
fmt.println(user)
// select * from `users` where `users`.`id` = 23 and `users`.`deleted_at` is null order by `users`.`id` limit 1
您可以找到具有非範圍的軟刪除記錄
db.debug().unscoped().first(&user, 21)
// select * from `users` where `users`.`id` = 21 order by `users`.`id` limit 1
您可以使用unscoped永久刪除匹配的記錄
db.debug().unscoped().delete(&user{}, 20)
// delete from `users` where `users`.`id` = 20
gorm系列 刪除
目錄軟刪除 刪除記錄 警告刪除記錄時,請確保主鍵欄位有值,gorm 會通過主鍵去刪除記錄,如果主鍵為空,gorm 會刪除該 model 的所有記錄。刪除現有記錄 db.delete email delete from emails where id 10 為刪除 sql 新增額外的 sql 操作 1...
gorm軟刪除 GORM 中文文件 2 4 刪除
刪除記錄 警告 當刪除一條記錄的時候,你需要確定這條記錄的主鍵有值,gorm會使用主鍵來刪除這條記錄。如果主鍵欄位為空,gorm會刪除模型中所有的記錄。刪除一條存在的記錄 db.delete email delete from emails where id 10 為刪除 sql 語句新增額外選項 ...
gorm中實現軟刪除和硬刪除
如果您的模型包含乙個gorm.deletedat字段 包含在 中gorm.model 它將自動獲得軟刪除能力!呼叫 時delete,記錄不會從資料庫中刪除,但 gorm 會將deletedat的值設定為當前時間,並且不再使用正常的 query 方法查詢資料。使用者 id 為 111 db.delet...