【问题标题】:Associations not working with test entries协会不适用于测试条目
【发布时间】:2020-10-20 18:30:57
【问题描述】:

我在 GORM 中定义了两个模型用户和地址: 文件 user.go

type User struct {
    gorm.Model
    Identity     string    `json:"identity"`
    Password     string    `json:"password"`
    Address      Address
    AddressID    int
}

type Address struct {
    gorm.Model
    Street       string `json:"street"`
    StreetNumber string `json:"streetnumber"`
}

在 main.go 文件中,我启动数据库,自动迁移并希望将测试用户添加到数据库:

database.InitDatabase()

database.DBConn.AutoMigrate(&user.User{})
database.DBConn.AutoMigrate(&user.Address{})

userRec := &user.User{ Identity: "John Wayne", Password: "mysecretpassword", Address: user.Address{Street: "Teststreet", StreetNumber: "1"}}

database.DBConn.Create(userRec)

创建了用户和地址,但是,地址与用户没有关联,只是 出现空的地址字段。我忘记了什么?

如果您的实体中有关联(使用嵌套模型),这是设置测试条目的正常方式吗?

【问题讨论】:

  • 地址与用户没有关联,只是空的地址字段出现 数据库中没有设置地址ID?
  • @Eklavya 是的,用户条目中的 AddressID 设置为默认值(此处为 0)。为什么它不与生成的地址条目相关联?

标签: go associations go-gorm


【解决方案1】:

尝试使用“address_id”字段作为foreignKey

例如

type User struct {
    gorm.Model
    Identity     string     `json:"identity"`
    Password     string     `json:"password"`
    Address      Address    `gorm:"foreignKey:address_id;association_autoupdate:false"`
    AddressID    uint       `json:"address_id"`
}

Online documentation

也许会有所帮助。

【讨论】:

  • 谢谢@DonPepemon。这似乎将正确的外键放入 AddressID 字段。但是,当我想查询所有用户时,我没有得到关联(只是地址的默认值):var users []user.Userdatabase.DBConn.Find(&users)
  • 没关系。我测试了 Insomnia 中的值作为 HTTP GET 响应,并且您明确包含了 `json:"-"`,它删除了 c.json(users) 的响应中的嵌套对象。你添加 `json:"-"` 有什么原因吗?
  • 这可以通过 golang 代码轻松完成,而不仅仅是 SQL 查询。这是我的错误,这里不需要 json: "-"。
  • @Heikkisorsa “当我想查询所有用户时,我没有收到关联” - 您需要通过调用 database.DBConn.Preload("Address").Find(&users) 来预加载(急切加载)关联
猜你喜欢
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多