Go 如何使用SQLBoiler执行多对多查询
我在用我的golang ORM 我试图查询一个用户及其所有角色,为此,我有以下表格: 角色:Go 如何使用SQLBoiler执行多对多查询,go,orm,many-to-many,sqlboiler,Go,Orm,Many To Many,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 rol
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
}
但我还是在寻找优雅的方式,您可以在以下链接中找到一些示例:
err.Error()==“sql:结果集中没有行”
->err==sql.ErrNoRows
您能告诉我们您的模型是什么样子吗?基于库的文档,看起来您应该能够执行类似于user.ROLESS.All()
的操作。我更新了我的帖子,在顶部添加了链接,在末尾添加了一个链接。我能够找到库,并根据它的文档对您应该能够执行的操作进行了评论。你能告诉我们你生成的模型是什么样子吗?@Gavin首先谢谢你,遗憾的是,复制粘贴它有点长,但是使用简单的多对多方案很容易模拟。如果您安装了sqllite,我可以编辑我的帖子并添加所需的sql以生成必要的表