Prisma 2高效的ManyToMany查询具有角色的用户

问题描述

我有几个表,User ---> UserRoles

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;

目前,我可以通过以下方式用pyramida2实现它:

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"
          }
        ]
      }
    ]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)