登录
首页 >  Golang >  Go问答

遇到连接 GORM 预加载时的恐慌问题

来源:stackoverflow

时间:2024-03-13 21:54:26 346浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《遇到连接 GORM 预加载时的恐慌问题》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我正在尝试使用 go 创建一个简单的 rest api 作为学习项目。我在尝试使用 gorm 的 joins 预加载功能填充 has many 关系时遇到了障碍。

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

1
panic: reflect: call of reflect.value.field on slice value

我在这里制作了一个最小的示例来显示我的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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:[email protected]: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):

注意 Join Preload 使用一对一关系,例如:has onebelongs to

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《遇到连接 GORM 预加载时的恐慌问题》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>