作为一个简单的背景,我有一个表 foo ,它有一个可以为空的int外键 bar_id 。我有一个函数可以从 foo 中删除 bar 关联,也就是将它设置为 NULL 。
foo
bar_id
bar
NULL
我已经尝试了所有方法:我尝试使用 sql.NullInt64 作为列类型,然后
sql.NullInt64
foo.BarId.Valid = false // even set Int64 = 0 for good measure db.Save(&foo) // with LogMode(true)
在UPDATE语句中未更新 bar_id
我试过了:
db.Raw("UPDATE foo SET bar_id = NULL WHERE id = ?", foo.ID).Row().Scan(&foo)
谢天谢地,SQL是正确的,但是对象没有更新。我认为我的gorm版本也没有 Error 。
Error
我尝试将Foo.BarId的类型更改为 *int64 ,并将指针设置为 nil ,但输出查询没有将 bar_id 更改为NULL。
*int64
nil
我该怎么办?
发布于 2019-02-15 05:19:41
这样啊,原来是这么回事。我需要明确地在 Select() 中包含该列
Select()
db.Model(&foo).Select("bar_id").Updates(map[string]interface{}{"bar_id": nil})
发布于 2021-08-25 08:52:49
另一种方法:
//RemoveAllChildren remove all the children func RemoveAllChildren(db *gorm.DB, dataEdit Mat) (Mat, error) { var matupdate Mat