选择所有依赖项

时间:2017-07-15 19:36:23

标签: go go-gorm

想象一下以下模型:

type (

    Account struct {
        gorm.Model

        CustomID string `gorm:"index;unique"`
        Name string
        Profiles []*Profiles `gorm:"ForeignKey:AccountID"`
    }

    Profile struct {
        gorm.Model

        AccountID uint `gorm:"index"`
        TheFoo *Foo
        TheDoo *Doo
    }

    Foo struct {
        ProfileID uint `gorm:"index"`
        Boo string
    }

    Doo struct {
        ProfileID uint `gorm:"index"`
        Moo string
    }
)

我获得整个结构的所有尝试总是失败。 acc总是只填充帐户数据而没有配置文件。

我甚至对这些db.Model(&acc).Related(&Profile{})的东西进行了考察,但仍然没有成功。 (也就是说,非常糟糕的)文档也没有澄清这一点。

var acc Account
db.Find(&acc, "custom_id = ?", myCustomID) 

你怎么会这样做?

2 个答案:

答案 0 :(得分:1)

我相信你可以使用支持ne的Preload方法,即:

account := new(Account)
db.Preload("Profiles.TheDoo").Preload("Profiles.TheFoo").Find(account, "custom_id = ?", myCustomID)

我还没有检查过你是否真的需要预先加载Profiles,但如果事实证明你使用它就不会受到伤害。

答案 1 :(得分:0)

您可以在调用相关功能时添加代码吗? http://jinzhu.me/gorm/associations.html#has-many我在文档中看到的内容很多,应该是这样的。

var acc Account
db.Find(&acc, "custom_id = ?", myCustomID)
db.Model(&acc).Related(&profiles)