go gorm 軟刪除和查詢

軟刪除

如果您的模型包含了一個 gorm.deletedat 字段(gorm.Model 已經包含了該字段),它將自動獲得軟刪除的能力!

擁有軟刪除能力的模型調用 Delete 時,記錄不會從數據庫中被真正刪除。但 GORM 會將 DeletedAt 置爲當前時間, 並且你不能再通過普通的查詢方法找到該記錄。

// user 的 ID 是 `111`
db.Delete(&user)
// UPDATE users 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;

如果您不想引入 gorm.Model,您也可以這樣啓用軟刪除特性:

type User struct {
  ID      int
  Deleted gorm.DeletedAt
  Name    string
}

查找被軟刪除的記錄

您可以使用 Unscoped 找到被軟刪除的記錄

db.Unscoped().Where("age = 20").Find(&users)
// SELECT * FROM users WHERE age = 20;

但是scan是可以查詢該記錄的

scan無視DeletedAt

db.Where("age = 20").Scan(&users)
// SELECT * FROM users WHERE age = 20;

永久刪除

您也可以使用 Unscoped 永久刪除匹配的記錄

db.Unscoped().Delete(&order)
// DELETE FROM orders WHERE id=10;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章