1 回答
TA贡献1995条经验 获得超2个赞
编辑:
根据以下所有答案,这里需要发生以下事情:
您需要将
Roles
结构重命名为Role
您需要
Roles
为每个对象加载按特定角色 ID 过滤用户
首先,您需要将Roles
结构重命名为Role
,并更改对它的引用:
角色结构
type Role struct {
gorm.Model
Name string `json:"name"`
Users []User `gorm:"many2many:user_roles"`
}
用户结构
type User struct {
gorm.Model
Email string `json:"email"`
Password string `json:"password"`
Token string `json:"bearer"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Phone string `json:"phone"`
SalesforceID string `json:"salesforce_id"`
WebflowID string `json:"webflow_id"`
Roles []Role `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
接下来,稍微修改一下您的代码。这里有一个不需要的连接:
func (h *Handler) GetAllEmployeesByRoleID(c *gin.Context) {
var users []models.User
var roleID int = 1
//you need to extract roleID from your query string or request body
tx := h.db.DB.
Preload("Roles").
Joins("INNER JOIN user_roles ur ON ur.user_id = users.id").
Where("ur.role_id = ?", roleID).
Find(&users)
if tx.Error != nil {
//handle error
c.JSON(500, tx.Error)
return
}
c.JSON(200, users)
}
因此,您添加Preload("Roles")以加载用户可以拥有的所有角色,正如我假设的那样,即使您按 过滤roleID,您也希望查看用户可以拥有的所有角色。
您可以使用JoinsandWhere来构建您已经使用过的类似查询。A JOINwith the rolestable 不是必需的,因为您在user_roles表格中有所需的信息。
- 1 回答
- 0 关注
- 121 浏览
添加回答
举报