postgresql - Gorm 和关系

标签 postgresql go go-gorm

我是 Golang 的新手,对 Gorm 更是如此。我正在尝试建立一对多的关系。基本上有一个股票代码和他的许多股票数据。一切都很好,除了我无法在模型上建立关系。我只需要一点关于如何做到这一点的提示(欢迎最佳实践)。

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

存在于它自己的文件和包中。 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 - Gorm 和关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47539442/

相关文章:

google-app-engine - 创建子记录时抛出 Invalid Key 消息

sql - PostgreSQL 在建表主键中添加

node.js - Postgresql、Node.js ORM - 相关表中的外键和主键问题(多对多)

go - 在索引处插入元素并按值删除数组中的元素

go - 发布一个 golang 模块 : Semantic versioning

loops - 为什么我的 go 协程在处理后卡住了?

go - 如何在 GORM 中使用动态数据结构

go - 如何切换数据库连接并将其共享到 Golang 中的模型? (Revel + Gorm)

postgresql - Vuejs 获取监视元素的 id

Postgresql - 只执行某些 IF 语句