2017-11-28 4 views
0

나는 Golang을 처음 접했고 Gorm에게 더 많은 것을 알렸다. 나는 일대 다 (one-to-many) 관계를 유지하려고 노력하고있다. 기본적으로 하나의 티커 심볼과 그의 많은 티커 데이터가 있습니다. 모든 것이 잘 작동합니다. 단, 모델에 관계를 구축 할 수 없다는 점을 제외하고는. 나는 그 일을하는 방법에 대한 약간의 힌트가 필요하다 (모범 사례 환영). 그것은 자신의 파일 및 패키지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{}) 
} 

들으

답변

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

에 대한 model.go 내가 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)