亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用嵌套對象更新記錄,從而產生重復鍵錯誤

使用嵌套對象更新記錄,從而產生重復鍵錯誤

Go
動漫人物 2022-08-09 20:21:00
我需要更新用戶配置文件,我正在獲取整個配置文件,允許用戶編輯他想要的內容,然后再次將整個配置文件發送到服務器以保存更新的任何值,但它不起作用。User {   Address {       Country {             // fields        },    // fields   },  Settings {     // fields   },  username: string,   email: string,}為了避免復雜化,我想發送整個記錄,保存所有內容,更新任何內容或為未更新的字段再次保存舊值。我試過這個:// Update User datafunc (r *RepositoryUserCrud) Update(uid int, user models.User) (int, error) {    var err error// 1, did not work, getting  Error 1062: Duplicate entry for email err = r.db.Debug().Model(&models.User{}).Where("id = ?", unit(uid)).Updates(user).Error// 2, did not work, getting  Error 1062: Duplicate entry for email err = r.db.Save(&user).Error;// 3, I tried to skip the duplicate key error by using {onConflict: DoNothing}err = r.db.Debug().Clauses(r.db.Model(&models.User{})                  .Where("id = ?", uint(uid)))                  .OnConflict{DoNothing: true}                  .Updates(user)}關于如何做到這一點的任何建議?如果深度嵌套對象中發生了更改,如何將更改應用于其表?還是我應該手動執行此操作?
查看完整描述

1 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

事實證明,電子郵件字段是主鍵,并且我沒有將ID作為更新記錄的一部分傳遞,因此它基本上是嘗試使用相同的電子郵件創建新記錄。

所以這個代碼工作,但要確保提供記錄本身。ID

err = r.db.Debug().Model(&models.User{}).Where("id = ?", unit(uid)).Updates(user).Error

我還需要手動更新其他表中的鏈接行。


查看完整回答
反對 回復 2022-08-09
  • 1 回答
  • 0 關注
  • 88 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號