Golang的GORM没有为"has many"关系添加关联



我刚开始使用GORM并试图建立一个"有很多关系"。我正在尝试将关联添加到 Previous.Holdings(我认为我正确遵循了文档),但是当我尝试进行select * from previous时,我没有看到数据库中显示任何内容。关于我错过了什么的任何想法。

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

首先,您应该创建previous表。您可以通过进行迁移来实现这一点。您可能应该在数据库连接初始化后进行迁移。例如

db.AutoMigrate(&Previous{})

因此,当您使用db.Model(&Previous{})时,您不会保存任何实体,如果您想与Holdings实体进行连接,您需要作为第一步来SaveFind现有的Previous记录

,例如
previous := &Previous{}
db.Save(previous)

之后,您可以将保留记录附加到Model,就像在代码中所做的那样,但更改引用的Previous。所以它会看起来像这样

h := Holding{
Symbol:       "abc",
PurchaseDate: t1,
}
db.Model(previous).Association("Holdings").Append(h)

我不知道它是否用于测试,但是当您对实体进行建模时,您可以制作引用的 id,而无需指定外键,并且您还将使用您的HoldingID 作为外键,因此Previous的 ID 将是您的 IDHolding

对我来说,您的模型声明应如下所示(PreviousID将自动签名为Previous的外键)

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
}

最新更新