go 开发中,通过gorm进行实体关系映射,并进行多对多关系查询是常见操作。
什么是多对多关系?
多对多关系是最常用的表关系。 这种关系能够提供关键信息,例如销售人员联系了哪些客户以及客户订单中有哪些产品。
当一个表中的一个或多个项可以与另一表中一个或多个项之间存在关系时,即存在多对多关系。 例如:
权限管理模块中一个用户有多个角色,一个角色也有多个用户。
代码示例
package user
import "gorm.io/gorm"
type Role struct {
ID uint `gorm:"id"`
Name string `json:"name"`
Users []User `gorm:"many2many:user_roles;"` // many-to-many relationship
}
type User struct {
gorm.Model
Name string `json:"name"`
Roles []Role `gorm:"many2many:user_roles;"` // many-to-many relationship
}
// GetRolesByUserName 通过用户角色名获取权限
func GetRolesByUserName(db *gorm.DB, userName string) (error, []Role) {
var roles []Role
var user User
err := db.Where("name = ?", userName).Find(&user).Error
if err != nil {
return err, nil
}
err = db.Model(&user).Association("Roles").Find(&roles)
return err, roles
}