2017-11-28 11 views
0

私はGolangを初めて、さらにGormを迎えました。私は、1対多の関係を構築しようとしています。基本的に1つのティッカーシンボルと多くのティッカーデータがあります。私はモデル上で関係を得ることができないことを除いて、すべてうまく動作します。私はちょうどそれを行う方法について少しヒントが必要です(ベストプラクティス歓迎)。それ自身のファイルおよびパッケージでGorm and relationships

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

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

ため model.go Thxを

答えて

0

とTickerDataスライスにおける(http://jinzhu.me/gorm/crud.html#associations

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

db.Create(&tickerModel) 

ロードTickerModelsとTickerDataModelsとの関係を作成作った溶液をそれが動作Link

db.Model(& TickerDataModel{}).AddForeignKey("ticker_id", "tickers(id)", "RESTRICT", "RESTRICT") 
0

は、私はTickerModelは多くのTickerDataModelを持っていると仮定セクションhttp://jinzhu.me/gorm/associations.html#has-many

を参照してください。次のモデルセットアップは、このトリックを行う必要があります。

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#preloading-eager-loading

db.Preload("TickerData").Find(&tickerModels)