gpt4 book ai didi

go - 如何查询与 go-gorm 关联的 Where 子句的多对多关系?

转载 作者:行者123 更新时间:2023-12-05 02:05:32 28 4
gpt4 key购买 nike

我有以下实体:

type User struct {
ID string
Name string
Groups []Groups `gorm:"many2many:users_groups"`
}

type Groups struct {
ID string
Name string
}

我知道我可以使用预加载

var users []Users
db.Preload("Groups").Find(&users)

我还可以使用

过滤用户
var users []Users
db.Preload("Groups").Where("name IN ?", []string{"name1", "name2"}).Find(&users)

这将带来所有名称等于“name1”或“name2”的用户

但我无法根据群组过滤用户

var users []Users
db.Preload("Groups", "name IN ?", []string{"groupname"}).Find(&users)

我希望它能带来组名等于“groupname”的所有用户

如何仅使用数据库来实现这一点? (我的数据库很大,我无法将所有用户加载到内存中并在应用程序中对其进行过滤)

我开了一个问题 on gorm repository还有

最佳答案

您可以很容易地通过组名获取用户:

db.Preload("Groups").Where("id IN (SELECT user_id FROM users_groups WHERE name IN ?)", []string{"name1", "name2"})

或者,更严格的方式:

db.Where("id IN (?)", db.Table("users_groups").
Select("user_id").
Where("name IN ?", []string{"name1", "name2"}),
)

关于go - 如何查询与 go-gorm 关联的 Where 子句的多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63475885/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com