尝试使用 GORM 加入预加载时出现恐慌
Panic when attempting to use GORM Joins Preloading
我正在尝试创建一个简单的 REST API 使用 go 作为学习项目。在尝试使用 GORM 的 Joins
预加载功能填充 has many
关系时,我 运行 遇到了麻烦。
据我所知,我已经正确设置了关系,table 结构在数据库中看起来不错并且记录被插入,但以下代码会产生错误:
panic: reflect: call of reflect.Value.Field on slice Value
我在这里制作了一个最简单的例子来说明我的问题
package main
import (
"log"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
type Page struct {
gorm.Model
Text string
BookID uint
}
type Book struct {
gorm.Model
Pages []Page
}
func main() {
db, err := gorm.Open(postgres.Open("postgres://postgres:password@host.docker.internal:5432/postgres"), &gorm.Config{})
if err != nil {
log.Fatal(err.Error())
}
db.AutoMigrate(&Book{})
db.AutoMigrate(&Page{})
db.Create(&Book{
Pages: []Page{
{Text: "Page One"},
},
})
result := []Book{}
// errors here
db.Joins("Pages").Find(&result)
// works fine
// db.Preload("Pages").Find(&result)
}
任何关于我哪里出错的指导将不胜感激,全新的去。
根据文档 (Joins Preloading):
NOTE Join Preload
works with one-to-one relation, e.g: has one
, belongs to
我正在尝试创建一个简单的 REST API 使用 go 作为学习项目。在尝试使用 GORM 的 Joins
预加载功能填充 has many
关系时,我 运行 遇到了麻烦。
据我所知,我已经正确设置了关系,table 结构在数据库中看起来不错并且记录被插入,但以下代码会产生错误:
panic: reflect: call of reflect.Value.Field on slice Value
我在这里制作了一个最简单的例子来说明我的问题
package main
import (
"log"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
type Page struct {
gorm.Model
Text string
BookID uint
}
type Book struct {
gorm.Model
Pages []Page
}
func main() {
db, err := gorm.Open(postgres.Open("postgres://postgres:password@host.docker.internal:5432/postgres"), &gorm.Config{})
if err != nil {
log.Fatal(err.Error())
}
db.AutoMigrate(&Book{})
db.AutoMigrate(&Page{})
db.Create(&Book{
Pages: []Page{
{Text: "Page One"},
},
})
result := []Book{}
// errors here
db.Joins("Pages").Find(&result)
// works fine
// db.Preload("Pages").Find(&result)
}
任何关于我哪里出错的指导将不胜感激,全新的去。
根据文档 (Joins Preloading):
NOTE
Join Preload
works with one-to-one relation, e.g:has one
,belongs to