我是Golang的新手,甚至是Gorm的新手。我正在尝试建立一对多关系。基本上有一个股票代号和他的许多股票代号数据。一切工作正常,除了我无法获得模型之间的关系。我只需要有关如何做到这一点的提示(欢迎最佳实践)。
main.go
package main
import (
"github.com/jinzhu/gorm"
"github.com/khwerhahn/quoteworker/common"
"github.com/khwerhahn/quoteworker/tickerdata"
"github.com/khwerhahn/quoteworker/ticker"
)
// Migrate database
func Migrate(db *gorm.DB) {
ticker.AutoMigrate()
tickerdata.AutoMigrate()
}
func main() {
db := common.Init()
Migrate(db)
defer db.Close()
//// more code....
}
存放在自己的文件和包中。
代码的
model.go
package ticker
import (
"github.com/jinzhu/gorm"
"github.com/khwerhahn/quoteworker/common"
)
type TickerModel struct {
gorm.Model
Name string `gorm:"column:name;unique_index"`
Symbol string `gorm:"column:symbol;unique_index"`
}
// AutoMigrate the schema of database if needed
func AutoMigrate() {
db := common.GetDB()
db.AutoMigrate(&TickerModel{})
}
存放在自己的文件和包中。
tickerdata的
model.go
package tickerdata
import (
"github.com/jinzhu/gorm"
"github.com/khwerhahn/quoteworker/common"
"github.com/khwerhahn/quoteworker/ticker"
)
type TickerDataModel struct {
gorm.Model
Rank int `gorm:"column:rank"`
// left out some stuff....
TickerModel ticker.TickerModel
TickerModelID uint `gorm:"column:tickerId"`
}
// AutoMigrate the schema of database if needed
func AutoMigrate() {
db := common.GetDB()
db.AutoMigrate(&TickerDataModel{})
}
谢谢
最佳答案
参见http://jinzhu.me/gorm/associations.html#has-many部分
我假设TickerModel有许多TickerDataModel。以下模型设置可以解决问题。
type TickerModel struct {
gorm.Model
Name string
Symbol string
TickerData []tickerdata.TickerDataModel
}
type TickerDataModel struct {
gorm.Model
Rank int
TickerModelID uint
}
用(http://jinzhu.me/gorm/crud.html#associations)创建一个关系
tickerModel := TickerModel{
Name: "foo",
Symbol: "bar",
TickerData: []TickerDataModel{
{Rank: "1"},
{Rank: "2"},
},
}
db.Create(&tickerModel)
使用(http://jinzhu.me/gorm/crud.html#preloading-eager-loading)在TickerData slice 中加载TickerModels和TickerDataModels
db.Preload("TickerData").Find(&tickerModels)
关于postgresql - 政府和关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47539442/