Golang的GORM没有将关联添加到“有很多”关系中

Golang的GORM没有将关联添加到“有很多”关系中,go,go-gorm,Go,Go Gorm,我刚开始使用,并试图建立一个有很多关系。我正在尝试向Previous.Holdings添加关联。我认为我正确地遵循了,但当我尝试从Previous执行select*时,我在数据库中没有看到任何显示。知道我错过了什么吗 import ( orm "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" ) type Previous struct { orm.Model Hol

我刚开始使用,并试图建立一个有很多关系。我正在尝试向Previous.Holdings添加关联。我认为我正确地遵循了,但当我尝试从Previous执行select*时,我在数据库中没有看到任何显示。知道我错过了什么吗

import (
    orm "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/sqlite"
)    

type Previous struct {
    orm.Model

    Holdings []Holding `gorm:"foreignkey:ID"`
}

type Holding struct {
    ID uint `gorm:"primary_key"`

    Symbol string
    PurchaseDate time.Time
    SellDate time.Time
}

func main() {
    t1, _ := time.Parse("2006-01-02", "2017-06-16")
    h := Holding{
        Symbol: "abc",
        PurchaseDate: t1,
    }
    db.Model(&Previous{}).Association("Holdings").Append(h)
}

首先,您应该创建上一个表。您可以通过进行迁移来实现这一点。您可能应该在db连接初始化之后进行迁移。e、 g

db.AutoMigrate(&Previous{})
因此,当你使用db.Model和Previous{}时,你不保存任何实体,如果你想与Holdings实体进行关联,你需要作为第一步来保存或查找现有的先前记录

previous := &Previous{}
db.Save(previous)
之后,您可以像在代码中一样将保留记录附加到模型中,但要更改前面引用的记录。所以看起来是这样的

h := Holding{
    Symbol:       "abc",
    PurchaseDate: t1,
}
db.Model(previous).Association("Holdings").Append(h)
我不知道它是否用于测试,但当您为实体建模时,您可以使用引用id,而不指定外键。您也使用了您的持有id作为外键,因此先前的id将是您的持有id

对我来说,您的模型声明应该看起来像这个以前的ID将自动作为前一个的外键签名

type Previous struct {
    orm.Model

    Holdings []Holding
}

type Holding struct {
    ID           uint `gorm:"primary_key"`
    PreviousID   uint
    Symbol       string
    PurchaseDate time.Time
    SellDate     time.Time
}

对不起,我在写这个问题时忘了把它包括在内,但我的代码中确实包含了它。