gorm中的刪除

2022-09-19 05:15:13 字數 2135 閱讀 7238

刪除一條記錄時,刪除物件需要指定主鍵,否則會觸發 批量 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...