gorm map更新操作时忽略数据库没有的字段
时间: 2023-07-28 15:13:37 浏览: 252
在 GORM 中,使用 Updates
函数可以对一个记录进行更新操作,同时只更新传入的字段。如果传入的字段在数据库中不存在,则会在更新时报错。为了忽略掉这些不存在的字段,可以使用 map[string]interface{}
类型来传递需要更新的字段,然后使用 Select
函数来选取数据库中存在的字段,再进行更新操作。
以下是一个示例代码:
type User struct {
ID uint `gorm:"primaryKey"`
Name string
Email string
}
// 更新用户信息
func updateUser(db *gorm.DB, userID uint, updates map[string]interface{}) error {
// 查询该用户是否存在
var user User
if err := db.First(&user, userID).Error; err != nil {
return fmt.Errorf("failed to find user: %w", err)
}
// 选取需要更新的字段
var selectedUpdates = make(map[string]interface{})
for key, value := range updates {
switch key {
case "Name":
selectedUpdates[key] = value
case "Email":
selectedUpdates[key] = value
}
}
// 更新用户信息
if err := db.Model(&user).Select(selectedUpdates).Updates(selectedUpdates).Error; err != nil {
return fmt.Errorf("failed to update user: %w", err)
}
return nil
}
在上面的代码中,updates
参数是一个字符串到任意类型的映射,表示需要更新的字段及其新的值。在选取需要更新的字段时,我们只选择了 Name
和 Email
两个字段,如果 updates
中包含其他字段,则会被忽略掉。最后,我们使用 Select
函数选取了数据库中存在的字段,再用 Updates
函数进行更新操作。
阅读全文
相关推荐













