我是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/

10-16 12:33