首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Gorm:如何将整型列设置为null,并在内存中更新模型?

Gorm:如何将整型列设置为null,并在内存中更新模型?
EN

Stack Overflow用户
提问于 2019-02-15 04:15:17
回答 3查看 5.6K关注 0票数 2

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

我已经尝试了所有方法:我尝试使用sql.NullInt64作为列类型,然后

代码语言:javascript
复制
foo.BarId.Valid = false // even set Int64 = 0 for good measure
db.Save(&foo) // with LogMode(true)

在UPDATE语句中未更新bar_id

我试过了:

代码语言:javascript
复制
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。

我该怎么办?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-15 05:19:41

这样啊,原来是这么回事。我需要明确地在Select()中包含该列

代码语言:javascript
复制
db.Model(&foo).Select("bar_id").Updates(map[string]interface{}{"bar_id": nil})
票数 1
EN

Stack Overflow用户

发布于 2021-08-25 08:52:49

另一种方法:

代码语言:javascript
复制
//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
 }

请参阅:https://gist.github.com/thanhtungka91/186dca4cd14d30581bb98193153a55bf

票数 0
EN

Stack Overflow用户

发布于 2021-09-11 02:37:43

您也可以使用gorm.Expr("NULL"),如下所示:

代码语言:javascript
复制
db.Model(&foo).Select("bar_id").Updates(map[string]interface{}{"bar_id": gorm.Expr("NULL")})

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54698391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档