1

我有几个表,用户 ---> UserRoles <--- 我想在其中查询所有用户并在查询中获取所有用户角色的角色。我可以用普通的 sql 来实现这一点:

SELECT u.user_id, u.first_name, r.description ...
FROM users AS u
INNER JOIN user_roles AS ur ON ur.user_id = u.user_id
LEFT JOIN roles AS r ON ur.role_id = r.role_id;

我目前可以通过以下方式使用 prisma2 实现它:

const main = async () => {
    const users = await prisma.users.findMany();

    for (let index = 0; index < users.length; index++) {
        const user = users[index];

        const roles = await prisma.user_roles.findMany({
            where: {
                user_id: user.user_id,
            },
            select: {
                roles: true,
            },
        });

        user.roles = [];
        roles.forEach((obj) => {
            user.roles.push(obj.roles);
        });
    }

    return users;
};

但是正如您所见,以这种方式重新查询每个用户的角色是很疯狂的,如何在一次查询数据库中完成呢?

prisma2 的期望结果与上面当前 prisma2 查询返回的结果相同:

"users": [
      {
        "user_id": "71096566-ef63-4865-96c3-136910420492",
        "first_name": "Jack",
        "roles": [
          {
            "description": "manager"
          },
          {
            "description": "admin"
          }
        ]
      },
      {
        "user_id": "c588da66-0e3a-42d5-abc9-9ea04c4687ef",
        "first_name": "Jill",
        "roles": [
          {
            "description": "superboss"
          }
        ]
      }
    ]
4

0 回答 0