GO gorm踩坑記


一. 軟刪除問題

  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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM