【问题标题】:Golang's GORM not adding associations to "has many" relationshipGolang 的 GORM 没有为“有很多”关系添加关联
【发布时间】:2018-03-26 02:38:00
【问题描述】:

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

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    首先你应该创建你的previous 表。你可以通过迁移来做到这一点。您可能应该在数据库连接初始化后进行迁移。例如

    db.AutoMigrate(&Previous{})
    

    因此,当您使用 db.Model(&Previous{}) 时,您不保存任何实体,并且如果您想与 Holdings 实体建立关联,您需要作为第一步到 SaveFind 现有 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 将是您的 @987654334 的 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
    }
    

    【讨论】:

    • 抱歉,我在写这个问题的时候忘了包括,但我的代码中确实包含了它。
    猜你喜欢
    • 2020-04-24
    • 1970-01-01
    • 2019-02-01
    • 2021-10-27
    • 1970-01-01
    • 2015-06-08
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多