gpt4 book ai didi

具有嵌套结构和关系的 Gorm 和元素 slice

转载 作者:IT王子 更新时间:2023-10-29 01:47:08 33 4
gpt4 key购买 nike

我正在使用 gormMySQL driver .

我有以下结构...

type City struct {
ID uint
Name string
Slug string
StateID uint // foreign key, must be used like INNER JOIN state ON city.state_id = state.id
State *State
}

type State struct {
ID uint
Name string
Slug string
}

这是简单的一对一关系(每个城市属于一个州)

使用原始 SQL,我使用以下代码将所有城市提取到 []City 中:

rows, err := db.Query(`SELECT c.id, c.name, c.slug, s.id, s.name, s.slug FROM city c INNER JOIN state s ON c.state_id = s.id`)
if err != nil {
return err
}
defer rows.Close()

for rows.Next() {
city := &City{
State: &State{},
}
err = rows.Scan(&c.ID, &c.Name, &c.Slug, &c.State.ID, &c.State.Name, &c.State.Slug)
if err != nil {
return err
}

*c = append(*c, city)
}

return nil

如何通过 gorm 提取所有城市,以便 gorm 扫描每个 City.State 字段相关的州?有什么方法可以在不调用 Rows() 然后手动 Scan 的情况下完成我需要的操作吗?

我希望是这样的:

cities := make([]City, 0)
db.Joins(`INNER JOIN state ON state.id = city.state_id`).Find(&cities)

但是 Statenil。我做错了什么?

最佳答案

你需要使用Preload方法:

db.Preload("state").Joins("INNER JOIN state ON state.id = city.state_id").Find(&cities)

在 Gorm 文档中查看更多信息:http://gorm.io/docs/preload.html

关于具有嵌套结构和关系的 Gorm 和元素 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48592285/

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