几天前,我开始学习go,并且正在尝试使用go and gorm构建REST API以实现数据持久性。我正在建立一个电影管理API,并且有一些使用质量和语言关联的配置文件。
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"`
}
和数据库中的创建
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查找我的数据库时,成功创建了语言和质量
sqlite> select * from qualities ;
1080p
720p
sqlite> select * from Languages ;
french
english
但是创建个人资料后,品质和语言仍然为空
sqlite> select * from profiles;
12|2019-07-25 09:54:44.165365026-04:00|2019-07-25 09:54:44.165365026-04:00|||||
根据gorm文档,我的个人资料应包含质量和语言的外键。
我在那里想念什么?
最佳答案
在您的个人档案模型中,您需要创建一个字段,该字段将存储相关模型的外键。所以您的个人资料模型应该看起来像
type Profile struct {
gorm.Model
ThresholdQuality Quality `json:"thresholdQuality" validate:"required"`
ThresholdQualityQuality string
PreferredLanguage Language `json:"preferredLanguage" validate:"required"`
PreferredLanguageLanguage string
}
默认情况下,gorm使用由Profile模型中的FieldName组成的字段名称(例如,TresholdQuality)和关联模型中主键字段的名称(对于Quality,结构为Quality字段)。您可以使用
gorm:"foreignkey"
标签进行更改,然后您的个人资料如下所示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
}
关于sqlite - GORM关联.Create(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57204011/