关于GORM预加载时, 外键为0, 结果不正确的问题

lobsterb · 2022-04-26 15:12:45 · 1308 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2022-04-26 15:12:45 的主题,其中的信息可能已经有所发展或是发生改变。

小弟是新人一名, 使用gorm关联数据后, 发现预加载时, 如果外键的值是0, 则无法加载出数据内容. 求解决方案.

代码如下:

type Profile struct {
    ID    uint `gorm:"primary_key"`
    Refer int
    Name  string
}

type User struct {
    gorm.Model
    Profile   Profile `gorm:"ForeignKey:ProfileID;AssociationForeignKey:Refer"`
    ProfileID int
    Username  string
}

func main() {
    db, err := gorm.Open("sqlite3", "test.db")
    if err != nil {
        panic("failed to connect database")
    }
    defer db.Close()

    db.AutoMigrate(&Profile{}, &User{})

    var pro Profile
    pro.ID = 1
    pro.Refer = 0
    pro.Name = "root"
    db.FirstOrCreate(&pro)

    pro.ID = 2
    pro.Refer = 1
    pro.Name = "user"
    db.FirstOrCreate(&pro)

    pro.ID = 3
    pro.Refer = 2
    pro.Name = "admin"
    db.FirstOrCreate(&pro)

    var user User
    user.ID = 1
    user.ProfileID = 0
    user.Username = "张三"
    db.FirstOrCreate(&user)

    user.ID = 2
    user.ProfileID = 1
    user.Username = "李四"
    db.FirstOrCreate(&user)

    user.ID = 3
    user.ProfileID = 2
    user.Username = "王五"
    db.FirstOrCreate(&user)

    var users []User
    db.Preload("Profile").Find(&users)

    for _, user := range users {
        fmt.Println(user.Profile)
    }

}

输出结果:

  1. {0 0 } // 正确时, 这里应该是 {1 0 root}
  2. {2 1 user}
  3. {3 2 admin}

数据库:

1.png 2.png


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1308 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传