GORM(Go Object Relational Mapper)是一個用于Go語言的ORM庫,它提供了軟刪除(Soft Delete)功能。軟刪除并不會從數據庫中永久刪除記錄,而是將記錄標記為已刪除,這樣在查詢時可以過濾掉這些記錄。這對于保留數據完整性和審計跟蹤非常有用。
在GORM中,軟刪除功能是通過在模型結構體中添加一個名為DeletedAt
的字段來實現的。這個字段應該是gorm.DeletedAt
類型,它是一個自定義的時間類型,用于表示記錄被刪除的時間。當記錄被刪除時,DeletedAt
字段會被設置為當前時間,而不是將記錄從數據庫中完全刪除。
當你使用GORM進行查詢時,它會自動過濾掉那些DeletedAt
字段不為空的記錄,因為這意味著這些記錄已經被軟刪除。這樣,你的查詢結果只會包含未被刪除的記錄。
例如,假設你有一個名為User
的模型,它包含一個DeletedAt
字段:
type User struct {
ID uint
Name string
Email string
DeletedAt gorm.DeletedAt `gorm:"index"`
}
當你使用GORM查詢所有用戶時:
var users []User
db.Find(&users)
GORM會生成類似于以下的SQL查詢:
SELECT * FROM users WHERE deleted_at IS NULL;
這個查詢會返回所有未被軟刪除的用戶記錄。
如果你想要在查詢中包含已刪除的記錄,可以使用Unscoped
方法:
var users []User
db.Unscoped().Find(&users)
這將生成以下SQL查詢:
SELECT * FROM users;
這個查詢會返回所有用戶記錄,包括已被軟刪除的記錄。