我使用SQLBoiler作为我的golang ORM。
我正在尝试查询用户及其所有角色,为此,我有以下表格:
角色:
role_id desc name
1 basic basic
用户:
user_id password user_name created_at updated_at updated_by ...
1 ... ... ... ... ...
USERS_ROLES:
id user_id role_id
1 1 1
foreign keys: user_id, role_id
我正尝试通过以下方式查询(不使用sql查询)用户及其所有角色:
func getUserRoles(user *models.USERS) (models.USERROLESSlice, error) {
if roles, err := user.UserUSERROLESS().All(context.Background(), DB); err != nil {
infra.LogError("failed to query user roles", err)
return nil, err
} else {
return roles, nil
}
}
这给了我models.USERROLESSlice而不是切片slice.ROLES 其中包含我的联接表。
或仅使用:
if usr, err := models.USERSS(qm.Where(query, req.Email, req.Password),qm.Load("ROLES")).One(context.Background(), DB); err != nil && err.Error() == "sql: no rows in result set" {
infra.LogInfo(fmt.Sprintf("no result for %s", req.Email))
return nil, nil
}
如果我有其他对象关系,我会做的 但是这些都不给我我期望的结果。
有人知道什么是简单而优雅的方法吗?
编辑: 现在,我只是使用qm.SQL前进
if roles, err := models.ROLESS(qm.SQL("SELECT roles.* FROM user_roles INNER JOIN roles ON user_roles.role_id = roles.role_id WHERE user_roles.user_id=@uid", user.UserID)).All(context.Background(), DB); err != nil {
infra.LogError("failed to query user roles", err)
return nil, err
}
但是我还是在寻找一种优雅的方式,您可以在以下链接中找到一些示例: https://github.com/volatiletech/sqlboiler