我刚开始使用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
实体进行连接,您需要作为第一步来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 作为外键,因此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
}