假设我们有两个表 users
和 roles
,它们之间的关系是多对多。那么我们可以通过一个中间表 user_roles
来描述它们的关系。
下面是一个简单的用户和角色的模型:
type User struct {
gorm.Model
Name string
Roles []*Role `gorm:"many2many:user_roles"`
}
type Role struct {
gorm.Model
Name string
Users []*User `gorm:"many2many:user_roles"`
}
其中 User.Roles
和 Role.Users
都是多对多关联。关联通过中间表来实现,并且在结构体定义时使用了特殊标签来声明。
如果我们要查询所有拥有某个角色的用户,可以通过以下代码来实现:
var users []*User
db.Preload("Roles", "name = ?", "admin").Find(&users)
上述代码中,我们使用了 GORM 的预加载功能(Preload
) 来同时获取用户和他们拥有的角色。而带条件查询则是通过在预加载函数中指定额外参数(如 "name = ?", "admin"
)实现的。
注意:这里 "admin"
是一个示例值,请根据实际情况替换成你需要查询的角色名称。