使用SQL通过中间模型返回嵌套模型

使用SQL通过中间模型返回嵌套模型,sql,postgresql,Sql,Postgresql,我正在使用Postgres 9.6,并试图建立一个权限模型,允许用户访问他们的项目及其项目“组件。看起来是这样的: 用户 +--------+--------+ | id | uuid | +--------+--------+ 权限 +--------+-----------+--------------+ | id | user_id | project_id | +--------+-----------+--------------+ 项目 +------

我正在使用Postgres 9.6,并试图建立一个
权限
模型,允许
用户
访问他们的
项目
及其
项目
组件
。看起来是这样的:

用户

+--------+--------+
|   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 = ?