Gorm:如何将整数列设置为空,并更新内存中的模型?

作为一个简单的背景,我有一个表foo,带有一个可为空的 int 外键bar_id。我有一个函数可以bar从 中删除关联foo,也就是将其设置为NULL。


我已经尝试了一切:我尝试使用sql.NullInt64作为列类型,然后


foo.BarId.Valid = false // even set Int64 = 0 for good measure

db.Save(&foo) // with LogMode(true)

bar_id未在 UPDATE 语句中更新


我试过:


db.Raw("UPDATE foo SET bar_id = NULL WHERE id = ?", foo.ID).Row().Scan(&foo)

谢天谢地,SQL 是正确的,但是对象没有更新。我认为我的 gorm 版本Error也没有。


我尝试将 Foo.BarId 的类型更改为*int64,并将指针设置为nil,但输出查询没有更改bar_id为 NULL。


我需要做什么?


慕码人8056858
浏览 215回答 3
3回答

慕田峪4524236

我得到了它。我需要专门将该列包含在Select():db.Model(&foo).Select("bar_id").Updates(map[string]interface{}{"bar_id": nil})

交互式爱情

gorm.Expr("NULL")您也可以像下面这样使用:db.Model(&foo).Select("bar_id").Updates(map[string]interface{}{"bar_id": gorm.Expr("NULL")})您也可以在datetime数据库字段类型上使用它。

ITMISS

另一种方法://RemoveAllChildren  remove all the children func RemoveAllChildren(db *gorm.DB, dataEdit Mat) (Mat, error) {     var matupdate Mat     db.Where("id = ?", dataEdit.ID).First(&matupdate)     if err := db.Model(&matupdate).Update("children_mat", gorm.Expr("NULL")); err != nil {             return matupdate, errors.New("cannotUpdate")     }     return matupdate, nil }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go