Mysql 使用Gorm使用0值更新
我正在尝试使用gorm库更新某些值,但未更新值为0的字节和整数Mysql 使用Gorm使用0值更新,mysql,go,go-gorm,Mysql,Go,Go 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
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 0 2018-01-01 4001-01-01},这些0是未更新的字节值(数据库中的tinyint(1),如果我更改为int也不工作),其余值工作正常
如果我用这种方式更新它们而不使用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)
这是我的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"`
}
谢谢你的帮助 我找到了一个非常棘手的方法来解决这个问题。您只需将结构字段类型更改为ptr即可 改变
type Temp struct{
String string
Bool bool
}
到
您可以参考此url:如果不想更改结构定义,也可以使用此解决方案(将结构转换为映射):但这不允许将
nil
作为有效值吗?我们可能不想要
type Temp struct{
String *string
Bool *bool
}