【问题标题】:Panic when attempting to use GORM Joins Preloading尝试使用 GORM Joins Preloading 时出现恐慌
【发布时间】:2021-09-06 10:35:55
【问题描述】:

我正在尝试使用 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: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)
}

任何关于我哪里出错的指导将不胜感激,全新的去。

【问题讨论】:

  • 您提到这些表具有“多”关系。 GORM 文档提到,“加入预加载以一对一的关系工作”。听起来它可能与您当前的设计不兼容。

标签: go go-gorm


【解决方案1】:

根据文档 (Joins Preloading):

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

【讨论】:

  • 欣赏!我可能在没有正确解析的情况下阅读了十几次。干杯!
猜你喜欢
  • 1970-01-01
  • 2021-11-29
  • 2012-04-03
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 2014-03-23
  • 2021-07-31
  • 2020-01-28
相关资源
最近更新 更多