我有几个表,用户 ---> 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"
}
]
}
]