我刚开始使用 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
table 。您可以通过迁移来做到这一点。您可能应该在数据库连接初始化后进行迁移。例如
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 所以 ID 为 Previous
将是您的 ID Holding
.
对我而言,您的模型声明应该如下所示(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
}
关于Golang 的 GORM 不向 "has many"关系添加关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49483172/