我使用SQLBoiler作为我的 golang ORM。
我正在尝试查询用户及其所有角色,为此我有以下表格:
角色:
role_id desc name
1 basic basic
用户:
user_id password user_name created_at updated_at updated_by ...
1 ... ... ... ... ...
用户角色:
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 而不是包含我的加入表的 models.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