为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕码人8056858 2023-06-05 19:28:23
作为一个简单的背景,我有一个表foo,带有一个可为空的 int 外键bar_id。我有一个函数可以bar从 中删除关联foo,也就是将其设置为NULL。我已经尝试了一切:我尝试使用sql.NullInt64作为列类型,然后foo.BarId.Valid = false // even set Int64 = 0 for good measuredb.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。我需要做什么?
查看完整描述

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

我得到了它。我需要专门将该列包含在Select()

db.Model(&foo).Select("bar_id").Updates(map[string]interface{}{"bar_id": nil})


查看完整回答
反对 回复 2023-06-05
?
交互式爱情

TA贡献1712条经验 获得超3个赞

gorm.Expr("NULL")您也可以像下面这样使用:

db.Model(&foo).Select("bar_id").Updates(map[string]interface{}{"bar_id": gorm.Expr("NULL")})

您也可以在datetime数据库字段类型上使用它。


查看完整回答
反对 回复 2023-06-05
?
ITMISS

TA贡献1871条经验 获得超8个赞

另一种方法:


//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

 }

查看完整回答
反对 回复 2023-06-05
  • 3 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信