【问题标题】:Update with 0 value using Gorm使用 Gorm 更新为 0 值
【发布时间】:2019-06-28 15:26:49
【问题描述】:

我正在尝试使用 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)

这是我的模型 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"`
}

感谢您的帮助!!

【问题讨论】:

标签: mysql go go-gorm


【解决方案1】:

我找到了一个非常棘手的方法来解决这个问题。你只需要将结构字段类型更改为 ptr。

改变

type Temp struct{
String string
Bool bool
}

type Temp struct{
String *string
Bool *bool
}

【讨论】:

  • 如果您不想更改结构定义,也可以使用此解决方案(将结构转换为映射):stackoverflow.com/questions/64330504/…
  • 但这不会允许nil 作为有效值吗?我们可能不想要的
猜你喜欢
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
相关资源
最近更新 更多