Golang 的 GORM 不向 "has many"关系添加关联

标签 go go-gorm

我刚开始使用 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/

相关文章:

mysql - 表引用一个表,该表又引用另一个表

c - 集成到静态库中的可重定位列表

c++ - 在64位系统上编译32位程序和调用64位程序

amazon-web-services - 没有必需的模块提供包 github.com/aws/aws-sdk-go/aws

go - 如何使用Youtube Go API获取视频信息?

go - 使用 GORM 从 Postgresql 检索表名称

sqlite - 在 Go GORM 中显示 Foreign Keys 的 Foreign Keys

go - golang regexp.matchString 有什么问题吗?

mysql - 如何从 GO 中的数组将数据输入到 mysql 模型中?

json - 是否有可能更改 gin-gonic 中的默认绑定(bind)时间戳格式?