如何在gorm中实现预加载

如何在gorm中实现预加载,go,go-gorm,Go,Go Gorm,我正在使用 我有一个问题,希望有人能帮助我解决或解释更多关于这一点 type User struct { ID int Name string Addresses []Address } type Address struct { UserID int `gorm:"index;not null"` Address string City string Zipcode int Country

我正在使用

我有一个问题,希望有人能帮助我解决或解释更多关于这一点

type User struct {
    ID        int
    Name      string
    Addresses []Address
}

type Address struct {
    UserID   int `gorm:"index;not null"`
    Address string
    City     string
    Zipcode  int
    Country  string
}

if err := db.Select("name").Preload("Addresses").Find(&users).Error; err != nil {
    // Display error message
} else {
    //
}
结果:

[
    {
      "created_at": "2017-04-02T00:07:59Z",
      "updated_at": "2017-04-02T00:07:59Z",
      "name": "Richard"
    }
  ]
SQL日志:

SELECT * FROM `users` WHERE `users`.deleted_at IS NULL AND ((1 <> 1))

我研究了其他一些关于StackOverflow的帖子,但没有看到任何解决方案

选择缺少的
id
字段,因此没有应用预加载。以下代码将用于解决此问题

if err := db.Select("id, name").Preload("Addresses").Find(&users).Error; err != nil {
    // Display error message
} else {
    //
}

为什么不打开日志记录,看看生成的SQL是否符合预期
db.LogMode(true)
在您的
db.Preload
之前,然后让我们知道它说了什么。如果这是您所期望的,请向我们展示您的数据库结构和相关数据。@dave只查看用户表上的选择查询我很惊讶您竟然会得到任何结果,因为
和((1))
将倾向于排除
选择查询中的所有内容。你确定你得到的结果不是某种默认结果吗?@davidaber谢谢你的评论,我想我在调试显示SQL查询时出错了,所以它是错误的日志。
if err := db.Select("id, name").Preload("Addresses").Find(&users).Error; err != nil {
    // Display error message
} else {
    //
}