使用SQL通过中间模型返回嵌套模型
我正在使用Postgres 9.6,并试图建立一个使用SQL通过中间模型返回嵌套模型,sql,postgresql,Sql,Postgresql,我正在使用Postgres 9.6,并试图建立一个权限模型,允许用户访问他们的项目及其项目“组件。看起来是这样的: 用户 +--------+--------+ | id | uuid | +--------+--------+ 权限 +--------+-----------+--------------+ | id | user_id | project_id | +--------+-----------+--------------+ 项目 +------
权限
模型,允许用户
访问他们的项目
及其项目
“组件
。看起来是这样的:
用户
+--------+--------+
| id | uuid |
+--------+--------+
权限
+--------+-----------+--------------+
| id | user_id | project_id |
+--------+-----------+--------------+
项目
+--------+
| id |
+--------+
+--------+--------------+
| id | project_id |
+--------+--------------+
组件
+--------+
| id |
+--------+
+--------+--------------+
| id | project_id |
+--------+--------------+
我想让User
uuid查询返回以下格式:
{
id: <user.id>,
uuid: <user.uuid>,
projects: [
{
id: <project1.id>
},
{
id: <project2.id>
}
],
components: [
{
id: <component1.id>,
project_id: <project1.id>
},
{
id: <component2.id>,
project_id: <project2.id>
},
{
id: <component3.id>,
project_id: <project1.id>
}
]
}
这很接近,但它不会返回所有它应该返回的项目
和所有组件
对于如何让it部门返回所有具有相关权限的项目
,以及这些项目的所有组件
,我非常感谢您提供任何建议或指导。我可以这样获得我所需的结构:
SELECT
u.id,
u.uuid,
ARRAY(
SELECT
row_to_json(b.*)
FROM (
SELECT
prj.id
FROM "Projects" prj
INNER JOIN "Permissions" prm
ON prj.id = prm.project_id
WHERE prm.user_id = u.id
) b
) as projects,
ARRAY(
SELECT
row_to_json(c.*)
FROM (
SELECT
cmp.id,
cmp.project_id
FROM "Components" cmp
INNER JOIN "Permissions" prm
ON cmp.project_id = prm.project_id
WHERE prm.user_id = u.id
) c
) as components
FROM "Users" u
WHERE u.uuid = ?