Golang的GORM没有将关联添加到“有很多”关系中
我刚开始使用,并试图建立一个有很多关系。我正在尝试向Previous.Holdings添加关联。我认为我正确地遵循了,但当我尝试从Previous执行select*时,我在数据库中没有看到任何显示。知道我错过了什么吗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
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
}
对不起,我在写这个问题时忘了把它包括在内,但我的代码中确实包含了它。