我刚开始使用GORM并尝试建立“有很多关系”。我正在尝试向Previous.Holdings添加关联(我认为我正确地遵循了docs),但是当我尝试执行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
实体进行关联,则需要通过执行以下操作来首先对Save
或Find
现有Previous
记录进行操作。previous := &Previous{}
db.Save(previous)
之后,您可以像在代码中一样将保留记录追加到
Model
,但更改引用的Previous
。所以看起来像这样h := Holding{
Symbol: "abc",
PurchaseDate: t1,
}
db.Model(previous).Association("Holdings").Append(h)
我不知道它是否用于测试,但是当您对实体建模时,您可以在不指定外键的情况下创建引用的ID,也可以将
Holding
ID作为ForeignKey使用,因此Previous
的ID将是您的Holding
的ID。对我来说,您的模型声明应如下所示(
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
}
关于go - Golang的GORM未将关联添加到 “has many”关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49483172/