Postgresql Gorm与关系

Postgresql Gorm与关系,postgresql,go,go-gorm,Postgresql,Go,Go Gorm,我对Golang是新手,对Gorm更是如此。我正试图建立一对多的关系。基本上只有一个股票代码和许多股票数据。一切都很好,只是我不能让模型的关系继续下去。我只需要一点提示,告诉我如何进行最佳实践 梅因,加油 package main import ( "github.com/jinzhu/gorm" "github.com/khwerhahn/quoteworker/common" "github.com/khwerhahn/quoteworker/tickerdata"

我对Golang是新手,对Gorm更是如此。我正试图建立一对多的关系。基本上只有一个股票代码和许多股票数据。一切都很好,只是我不能让模型的关系继续下去。我只需要一点提示,告诉我如何进行最佳实践

梅因,加油

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{})
}
存在于它自己的文件和包中。 model.go获取tickerdata

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{})
}
Thx

参见章节

我假设TickerModel有许多TickerDataModel。下面的模型设置应该可以做到这一点

type TickerModel struct {
    gorm.Model
    Name        string
    Symbol      string
    TickerData  []tickerdata.TickerDataModel
}


type TickerDataModel struct {
    gorm.Model
    Rank           int
    TickerModelID  uint
}
与…建立关系

使用加载TickerData切片中的TickerModels和TickerDataModels


使它起作用的解决方案

tickerModel := TickerModel{
    Name:       "foo",
    Symbol:     "bar",
    TickerData: []TickerDataModel{
        {Rank: "1"},
        {Rank: "2"},
    },
}

db.Create(&tickerModel)
db.Preload("TickerData").Find(&tickerModels)
db.Model(& TickerDataModel{}).AddForeignKey("ticker_id", "tickers(id)", "RESTRICT", "RESTRICT")