go - 尝试使用 GORM 连接预加载时出现 panic

标签 go go-gorm

我正在尝试使用 go 创建一个简单的 REST API 作为学习项目。我在尝试使用 GORM 的 Joins 预加载功能填充 has Many 关系时遇到了障碍。

据我所知,我已经正确设置了关系,数据库中的表结构看起来不错并且记录已插入,但以下代码会产生错误:

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:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4434253737332b3620042c2b37306a202b272f21366a2d2a3021362a2528" rel="noreferrer noopener nofollow">[email protected]</a>: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

关于go - 尝试使用 GORM 连接预加载时出现 panic ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69073133/

相关文章:

arrays - 在 Go 中将指针转换为数组

go - 扫描dynamodb表并在go sdk列表中使用包含

go - 再次出现运行时错误 : invalid memory address or nil pointer dereference,

json - json 编码时间中可变的亚秒数

Golang Gorm - 预加载深度嵌套模型

Gorm Scan 未绑定(bind)到结构

go - 从接口(interface)转换为实际对象时出现类型断言错误

去大文件下载并传递给客户端(代理)

go - BeforeSave 不填充数据

go - 使用 gin 和 gorm 在 go lang 中对创建和更新操作使用相同的结构