【发布时间】:2021-05-21 06:26:27
【问题描述】:
我需要更新用户配置文件,我正在获取整个配置文件,允许用户编辑他想要的内容,然后将整个配置文件再次发送到服务器以保存更新的任何值,但它不起作用。
User {
Address {
Country {
// fields
},
// fields
},
Settings {
// fields
},
username: string,
email: string,
}
为避免复杂化,我想发送整个记录,全部保存,更新任何已更新的内容或为未更新的字段再次保存旧值。
我试过这个:
// Update User data
func (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)
}
关于如何进行这项工作的任何建议?
如果深度嵌套的对象发生了变化,如何将这些变化应用到它们的表中?还是我应该手动执行此操作?
【问题讨论】:
-
你为什么把你所有的go代码sn-ps都标记为
js?? -
它给出错误 1062:电子邮件的重复条目,例如尝试输入新记录而不更新现有记录
-
确保您没有尝试将电子邮件更新为表中已存在的电子邮件。并确保您要更新的每个子实体都有一个 ID。