sql - 布尔字段未更新
问题描述
我正在尝试通过使用来自 gorm的更新批处理我的请求中的所有更改来更新我的整个数据库。除布尔值外,所有字段都在更新。数据库也没有抛出错误。
这是我的结构
type Client struct {
ClientID string `json:"client_id"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Email string `json:"email"`
Telephone string `json:"telephone"`
AcceptNotification bool `json:"accept_notification"`
Verfied bool `json:"verified"`
}
并且更新客户端的代码是
func (b *Client) UpdateClient(request models.Client) (err error) {
db := b.DB
result := db.Table("client").
Where("client_id = ? AND store_id = ?", request.ClientID, request.StoreID).
Updates(request)
if result.Error != nil {
return result.Error
}
return nil
}
在文档中它说
使用 struct 更新时,GORM 只会更新非零字段,您可能想使用 map 更新属性或使用 Select 指定要更新的字段
可能是什么问题?解决办法是什么?
解决方案
您不能使用 struct 更新零值(您应该使用地图)。从文档:
更新多列更新支持用struct或map[string]interface{}更新,用struct更新时默认只更新非零字段
// Update attributes with `struct`, will only update non-zero fields db.Model(&user).Updates(User{Name: "hello", Age: 18, Active: false}) // UPDATE users SET name='hello', age=18, updated_at = '2013-11-17 21:34:10' WHERE id = 111; // Update attributes with `map` db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 18, "active": false}) // UPDATE users SET name='hello', age=18, active=false, updated_at='2013-11-17 21:34:10' WHERE id=111;
注意 使用 struct 更新时,GORM 只会更新非零字段,您可能希望使用 map 更新属性或使用 Select 指定要更新的字段
推荐阅读
- c# - 为什么我的 document.Add(paragraph) 不起作用(wpf、iText)?
- javascript - MERN 应用部署到 heroku,一个空白页面
- google-sheets - 从 Google 表格中的单元格中提取特定信息
- java - 如何从 Opentype 字体的 GPOS 表中使用和提取字距调整对,以在 Java 中将字形正确显示为 Path2D?
- ios - 错误:CocoaPods 找不到 pod“FBSDKCoreKit”的兼容版本
- javascript - 球沿抛物线轨迹反弹
- visual-studio - VisualStudio/Fortran 并行化导致“此应用程序无法在此 PC 上运行”错误?
- ios - 如何让我的颜色渐变出现在我的自定义 UIView Swift 中
- python-3.x - 获取 Windows 10 中可见的命名窗口列表
- html - 当我将插入文本放入图像样式时,为什么 box-shadow 不起作用?