[英]Update with 0 value using Gorm
我正在尝试使用 gorm 库更新一些值,但没有更新值为 0 的字节和整数
var treatment model.TreatmentDB
err = json.Unmarshal(b, &treatment)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
fmt.Println(&treatment)
db := db.DB.Table("treatment").Where("id = ?", nID).Updates(&treatment)
此打印值为 {0 3 1 0 0 0 2018-01-01 4001-01-01} 并且那些 0 是未更新的字节值(数据库中的tinyint(1),如果我更改为int 也不起作用) ,值的 rest 工作正常
如果我在不使用 Gorm 的情况下更新它们,它可以完美地使用 0 值
var query = fmt.Sprintf("UPDATE `pharmacy_sh`.`treatment` SET `id_med` = '%d', `morning` = '%d', `afternoon` = '%d', `evening` = '%d', `start_treatment` = '%s', `end_treatment` = '%s' WHERE (`id` = '%s')", treatment.IDMed, treatment.Morning, treatment.Afternoon, treatment.Evening, treatment.StartTreatment, treatment.EndTreatment, nID)
update, err := dbConnector.Exec(query)
这是我的 model obj
type TreatmentDB struct {
gorm.Model
ID int `json:"id"`
IDMed int `json:"id_med"`
IDUser int `json:"id_user"`
Morning byte `json:"morning"`
Afternoon byte `json:"afternoon"`
Evening byte `json:"evening"`
StartTreatment string `json:"start_treatment"`
EndTreatment string `json:"end_treatment"`
}
谢谢你的帮助!!
我发现了解决此问题的非常棘手的方法。您只需要将struct字段类型更改为ptr。
更改
type Temp struct{
String string
Bool bool
}
至
type Temp struct{
String *string
Bool *bool
}
如果你想保存零,你必须写“选择”并将列更改
db.Model(&user).Select("Name", "Age").Updates(User{Name: "new_name", Age: 0})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.