Mikaelemmmm / go-zero-looklook

🔥基于go-zero(go zero) 微服务全技术栈开发最佳实践项目。Develop best practice projects based on the full technology stack of go zero (go zero) microservices.

Home Page:https://go-zero.dev

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

一对多和多对多查询

mhxy2018 opened this issue · comments

commented

你好,go-zero里面的sqlx组件进行一对多和多对多查询要怎么处理呀,我看sqlx的issues有提过同样的问题,尝试了一下没有绑定数据到结构体里面。
sqlx 一对多issues地址 jmoiron/sqlx#636
查询代码如下:
RsUser struct {
Id int64 db:"id" // 唯一标示
...
}
RsRole struct {
Id int64 db:"id" // 主键
...
}
RsMenu struct {
Id int64 db:"id" // 主键
...
}
CurrentLoginUser struct {
RsUser db:"RsUser"
Role []RsRole db:"RsRole"
Menu []RsMenu db:"RsMenu"
}
//联表查询当前登录用户信息
queryOp := squirrel.Select("u.id AS 'RsUser.id'",
...
"r.id as 'RsRole.id'",
...
"m.id as 'RsMenu.id'",
...
).From("rs_user u ").LeftJoin("re_user_role ur ON ur.user_id = u.id ").LeftJoin("rs_role r ON r.id = ur.role_id AND r.del_flag = 0 ").LeftJoin("re_role_menu rm ON rm.role_id = r.id ").LeftJoin("rs_menu m ON m.id = rm.menu_id AND m.del_flag = 0 ").Where("u.id = ? AND u.del_flag = 0")
query, _, err := queryOp.ToSql()
if err != nil {
return nil, err
}
//查询与缓存
resp := &[]CurrentLoginUser{}
err = c.conn.QueryRowsCtx(ctx, resp, query, id)
return *resp, err

查询结果数据绑定失败:
image

我进行1对1绑定查询是可以查询到数据的:
CurrentLoginUser struct {
RsUser
RsRole
RsMenu
}
查询数据绑定成功:
image

不建议连表查,如果非要,就单独定义结构体映射返回字端

commented

不建议连表查,如果非要,就单独定义结构体映射返回字端

嗯,暂时按照这种方式处理好了,查询出来之后手动解析了一下,根据关联关系手动1vN