一. 軟刪除問題
1. 問題描述
gorm調用delete刪除數據時,默認底層調用update方法,將delete_at設置為當前時間
user表中name字段為唯一,這個用戶允許刪除
每次Create記錄的時候,如果之前已經存在一條已經被軟刪除的記錄,並且被軟刪除的記錄的name與當前新增的記錄的name相同
那么在驗證name是否存在的時候,select 就無法查到被軟刪除的記錄,導致驗證通過了新增失敗的問題
2. 解決方案:
兩種解決方案: Unscoped()
2.1. 物理刪除:
db.Unscoped().Where("id = ?", 1).Delete(&User{})
2.2. 篩選查詢:
db.Unscoped().Where("name=?", name).Find(&User{})
二. 分頁問題
1. 問題描述:
db.Where().Find(&data).Limit(limit).Offset(offset).Count(&total) // 這段代碼會出現奇怪的錯誤:總條數查不到等等
2. 解決方案
db.Where().Find(&data).Count(&total).Limit(limit).Offset(offset) // 將Count 放在 分頁前
三. 查詢問題
1. 問題描述:
db.First(&User{}) // 如果沒有記錄則會返回error: RecordNotFound
db.Find(&User{}) // 如果沒有記錄則會返回error: RecordNotFound
2. 解決方案
兩種解決方案:
2.1. 接受err並判斷err是否為 RecordNotFound
2.2. 傳遞切片:
var user []User
db.Find(user)
