首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GORM关联.Create()

GORM关联.Create()
EN

Stack Overflow用户
提问于 2019-07-25 22:09:56
回答 1查看 98关注 0票数 0

我几天前开始学习go,我正在尝试使用go和gorm构建一个REST API来实现数据持久化。我正在构建一个电影管理API,并且我有一些使用质量和语言关联的配置文件。

代码语言:javascript
复制
type Profile struct {
    gorm.Model
    ThresholdQuality Quality `json:"thresholdQuality" validate:"required"`

    PreferredLanguage Language `json:"preferredLanguage" validate:"required"`
}

type Language struct {
    Language string `json:"language" gorm:"primary_key"`
}

type Quality struct {
    Quality string `json:"quality" gorm:"primary_key"`
}

以及在数据库中的创建

代码语言:javascript
复制
func InitDb(){
    var err error
    DB, err = gorm.Open("sqlite3", "gotorro.db")
    if err != nil {
        fmt.Printf("%s",err)
        panic("failed to connect database.")
    }
    DB.AutoMigrate(&Movie{})
    DB.AutoMigrate(&Quality{})
    DB.AutoMigrate(&Language{})
    DB.AutoMigrate(&Profile{})

    french := Language{Language:"french"}
    english := Language{Language:"english"}

    DB.Create(&french)
    DB.Create(&english)

    profile := Profile{
        ThresholdQuality: Quality{"1080p"},
        PreferredLanguage: Language{"french"},
    }

    DB.Create(&profile)
}

在查看我的数据库时,虽然sqlite的语言和质量是成功创建的

代码语言:javascript
复制
sqlite> select * from qualities ;
1080p
720p
sqlite> select * from Languages ;
french
english

但是,当我的个人资料创建后,质量和语言仍然是空的

代码语言:javascript
复制
sqlite> select * from profiles;

12|2019-07-25 09:54:44.165365026-04:00|2019-07-25 09:54:44.165365026-04:00|||||

根据gorm文档,我的个人资料应该包含质量和语言的外键。

我错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-07-26 00:39:07

在您的配置文件模型中,您需要创建将存储相关模型的外键的字段。因此,您的配置文件模型应该如下所示

代码语言:javascript
复制
type Profile struct {
    gorm.Model
    ThresholdQuality           Quality `json:"thresholdQuality" validate:"required"`
    ThresholdQualityQuality    string
    PreferredLanguage          Language `json:"preferredLanguage" validate:"required"`
    PreferredLanguageLanguage  string
}

默认情况下,gorm使用由配置文件模型中的FieldName组成的关系的字段名称(在您的情况下,例如.TresholdQuality)和关联模型中主键字段的名称(对于Quality结构为Quality字段)。你可以通过使用gorm:"foreignkey"标签来改变这一点,然后你的配置文件就会如下所示

代码语言:javascript
复制
type Profile struct {
    gorm.Model
    ThresholdQuality     Quality `gorm:"foreignkey:ThresholdQualityID" json:"thresholdQuality" validate:"required"`
    ThresholdQualityID   string
    PreferredLanguage    Language `gorm:"foreignkey:PreferredLanguageID" json:"preferredLanguage" validate:"required"`
    PreferredLanguageID  string
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57204011

复制
相关文章

相似问题

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