具有嵌套结构和关系的Gorm和元素切片
我正在使用 我有以下结构具有嵌套结构和关系的Gorm和元素切片,go,go-gorm,Go,Go Gorm,我正在使用 我有以下结构 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 s
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)
但是
状态
是nil
。我做错了什么?您需要使用预加载方法:
db.Preload(“state”).Joins(“state.id=city.state\u id上的内部连接状态”).Find(&cities)
请参阅Gorm文档中的更多信息: