Gorm : How do I set an integer column to null, 并更新内存中的模型?

标签 go go-gorm

作为一个简单的背景,我有一个表foo,带有一个可为空的int外键bar_id。我有一个函数可以从 foo 中删除 bar 关联,也就是将其设置为 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 版本也没有错误

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

我需要做什么?

最佳答案

我明白了。我需要在 Select() 中专门包含该列:

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

关于Gorm : How do I set an integer column to null, 并更新内存中的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54698391/

相关文章:

go - 如何在gorm(GoLang)中创建BelongsTo关系

mysql - 外键和相关数据与 gorm

sockets - 如何在不阻塞 Go 的情况下读取客户端通过 TCP 连接发送的一条消息中的所有数据?

go - channel 中的元素数

pointers - 使用指向值的指针作为 slice

Golang 如何从 html/template 访问 slice 字段

mysql - 如何为gorm组织多个外键

postgresql - PostgreSQL Has-Many关系插入相同的ID错误

mysql - 如何使用 gorm 获取多个用户的数据?

methods - Go中的参数传递