猿问

使用 Gorm 更新为 0 值

我正在尝试使用 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 也不起作用) ,其余值工作正常


如果我在不使用 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)

这是我的模型对象


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"`

}

谢谢你的帮助!!


德玛西亚99
浏览 324回答 3
3回答

汪汪一只猫

我找到了一个非常棘手的方法来解决这个问题。您只需要将结构字段类型更改为 ptr 即可。改变type Temp struct{String stringBool bool}到type Temp struct{String *stringBool *bool}

斯蒂芬大帝

如果你想保存零,你必须写“选择”并把列更改db.Model(&user).Select("姓名", "年龄").更新(用户{姓名: "new_name", 年龄: 0})

PIPIONE

我认为,这也是可能的方式,如何去做:var t TreatmentDB db.Find(&t).Where("id = ?", 1)t.IDUser = 0db.Save(t)
随时随地看视频慕课网APP

相关分类

Go
我要回答