gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:21:04 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com