GORM更新外键字段正在清除外数据结构中的数据

问题描述

我正在将Golang GORM与psql一起使用。我有一个与模块具有一对一关系的用户对象。用户可以随时更改模块,并且需要这样做,我需要为当前用户新用户表中的外键。

我试图学习习惯于GORM想要做事的方式,但是在涉及和更新关系方面,一般指南和教程似乎在某些地方停滞了。

我已经在init()函数添加

db.Model(&User{}).AddForeignKey("module_id","modules(id)","RESTRICT","RESTRICT")
我了解的

会在模块表中的用户module_id列和id列之间建立关系。

我要在json中发布一个非常简化的module对象

{
    "ID":1
}

我的模块对象看起来像

type Module struct {
    gorm.Model
    ...//more fields here
}

然后将其“关联”到当前用户,我正在做

    tmpuser := database.User{
        Model:   gorm.Model{ID: userId},Module: postedModule,}

最后,我正在为用户设置模块ID为新的

    if err := db.Debug().Model(&u).Update("ModuleID",u.Module.ID).Error; err != nil {
        log.Println("UpdateTemplateForCampaignById error ",err)
        return err
    }

我意识到这可以使用原始sql完成,但是我试图了解GORM希望您如何做。

与此相关的问题是,它确实会更新用户表中的module_id,并且还会清除具有该ID的模块表中的所有数据。

我想,当我在init()添加外键并将更新设置为RESTRICT时,它将停止此操作,但是由于某种原因,它仍会清除该条目。

我在做什么错了?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)