如何使用结构更新多个属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用结构更新多个属性相关的知识,希望对你有一定的参考价值。
我试图制作一个可以通过给定参数更新用户的函数。
我的方法:
func UpdateMultiple(db *gorm.DB, user *User, id uint32) error {
usr := User{}
err := db.Debug().Model(User{}).Where("id = ?", id).Updates(map[string]interface{}{"email": user.Email, "is_active": false}).Take(&usr).Error
if err != nil {
return err
}
return nil
}
并且像这样使用:
Updater := &User{
Email: holder.Email,
IsActive: false,
}
err = UpdateMultiple(s.DB, Updater, id)
目前运行良好。但是,如果要更新其他字段,则必须更改我的UpdateMultiple()方法。我还有其他方法可以在不更改方法而仅更改给定参数值的情况下进行更新吗?
User
模型传递给Updates
函数,它将使用非空白值更新所有结构字段(这意味着所有字段都应该是指针,以便充分利用此功能)。代码看起来像这样:func UpdateMultiple(db *gorm.DB, user *User, id uint32) error {
return db.Debug().
Model(User{}).
Where("id = ?", id).
Updates(user).Error
}请参阅官方文档中的一些示例:
// Update multiple attributes with `struct`, will only update those changed & non blank fields db.Model(&user).Updates(User{Name: "hello", Age: 18}) //// UPDATE users SET name='hello', age=18, updated_at = '2013-11-17 21:34:10' WHERE id = 111; // WARNING when update with struct, GORM will only update those fields that with non blank value // For below Update, nothing will be updated as "", 0, false are blank values of their types db.Model(&user).Updates(User{Name: "", Age: 0, Actived: false})
id
获取用户user := &User{}
db.First(&user, id)
更新您要更新的字段
user.Email = "a@a.com" user.IsActive = false
并更新用户信息
db.Save(&user)
或创建
map[string]interface{}
并添加要更新的字段。
mp := make(map[string]interface{}) mp["email"] = holder.Email mp["is_active"] = false
并更新用户
db.Model(User{}).Where("id = ?", id).Updates(mp)
以上是关于如何使用结构更新多个属性的主要内容,如果未能解决你的问题,请参考以下文章
在 TabLayout 和 ViewPager2 中执行异步任务后更新具有相同布局的多个片段
如何让片段中的多个视图调用片段类中声明的相同 onClick 函数?