表中只有一个字段的Many2many关系预加载

时间:2019-07-13 03:43:46

标签: go orm go-gorm

我有两个set对象,它们非常相似,但不完全相同。 由protobuf生成:

// generated by protobuf
type User struct {
    Id    string
    Name  string
    Group []string
}

type Group struct {
    Id   string
    Name string
}

还有Gorm类型,它们相似但不完全相同:

// gorm storage definition
type User struct {
    ID     string `gorm:"primary_key;size:36;"`
    Name   string
    Groups []*Group `gorm:"many2many:user_groups;"`
}

type Group struct {
    ID    string `gorm:"primary_key;size:36"`
    Name  string
    Users []*User `gorm:"many2many:user_groups;"`
}

我想执行以下操作:

var users []*pb.User
s.db.Preload("Groups").Find(&users).Related("Groups")

并获取使用User对象和组ID填充的protobuf用户。不幸的是,我得到了这样的内存地址字符串:[0xc0001de460 0xc0001de5a0]

天真的方法是对用户进行循环,然后附加所有组ID,并使用它创建pb.User对象。我不喜欢它,可能会很慢。 考虑到many2many根本不将组存储在users表中,应该有一种方法可以检索组ID并将它们包括在user_groups表的结果中。 但是我无法完善文档中的解决方案,只能手动完成几乎所有操作(SQL查询,扫描等)。

是我想念某些东西还是需要一些非凡的东西?

0 个答案:

没有答案