Gorm Golang获取集合及其关系

Gorm Golang获取集合及其关系,orm,go,go-gorm,Orm,Go,Go Gorm,我最近开始使用Golang,并决定尝试GORM作为ORM。 它在大多数情况下都能很好地工作,但由于大多数orm有时都很有限。幸运的是,它与数据库/sql紧密相连,因此我可以轻松地进行自定义查询 我想知道在gorm中是否还有其他方法可以做到这一点: 我有一个结构化的公司,公司有一对多的关系,包括电子邮件、地址和电话。我在gorm中使用以下代码来提取公司列表及其相应的信息。我使用gorm的预加载功能 db.DBAccess. Model(&companies). Count(

我最近开始使用Golang,并决定尝试GORM作为ORM。 它在大多数情况下都能很好地工作,但由于大多数orm有时都很有限。幸运的是,它与数据库/sql紧密相连,因此我可以轻松地进行自定义查询

我想知道在gorm中是否还有其他方法可以做到这一点: 我有一个结构化的公司,公司有一对多的关系,包括电子邮件、地址和电话。我在gorm中使用以下代码来提取公司列表及其相应的信息。我使用gorm的预加载功能

db.DBAccess.
    Model(&companies).
    Count(&dbInfo.Count).
    Order("companies.id asc").
    Offset(offset).
    Limit(length).
    Preload("Addresses").
    Preload("Phones").
    Preload("Emails").
    Find(&companies)

这个很好用。然而,我觉得有另一种方法可以在没有预加载功能的情况下实现这一点。有什么想法吗?

您可以稍后加载相关实体(仅在需要时),使用如下所示:


我在文档中看不到其他方法。

您有什么想法?我认为您可以实现查询回调,但我认为这不值得这么做。自动延迟加载是不可能的,因为在structs字段上没有拦截机制。你能给出一个模型的示例吗?我希望它在不显式调用
Preload
的情况下加载它们,只要正确指定了关系。如果没有,则应该向包中添加一些选项,如
cascadingrad
,它会导致递归实例化,而不是返回一个带有空数组的对象,该数组应该包含当前对象与之有外键关系的许多项。
// User has many emails
db.Model(&user).Related(&emails)
//// SELECT * FROM emails WHERE user_id = 111;
// user_id is the foreign key, 111 is user's primary key's value

// Specify the foreign key
db.Model(&user).Related(&emails, "ProfileId")
//// SELECT * FROM emails WHERE profile_id = 111;
// profile_id is the foreign key, 111 is user's primary key's value