对于 Prisma Client 连接查询,是否可以将深度嵌套的字段移动到结果的顶层?
For Prisma Client join queries is it possible to move deeply nested fields to top level of result?
Prisma 是否能够将嵌套字段从另一个 table 连接移动到结果的顶层,如平面视图?我想将结果 JSON 放入前端 table 而无需挖掘嵌套对象并构建另一个对象。
例如,我想复制此行为,以便我可以从不同的 table 中挑选列(来自用户和学校的列)。目前我使用类似 SQL 的原始查询,但是我想知道是否可以仅使用 Prisma API:
SELECT
u.id
, u.email
, s.school_name
FROM "User" AS u
JOIN "UserSchool" AS us ON us.user_id = u.id
JOIN "School" AS s ON s.id = us.school_id
id | email | school_name
123| student1@email.com | mount high
I want JSON that looks like this:
{
"id": "1",
"email": "student1@email.com",
"school_name": "mount high",
}
如果我在 Prisma 中这样做,我将需要进入多层嵌套对象才能在另一个 table 上获得相同的列名,例如user[user_school][schoo][school_name]
。这需要额外的工作来遍历我的所有结果,从嵌套对象中提取,并构建另一个对象。这个例子还不错,但我有更多的连接和深层嵌套的对象来解决我的实际问题(很多 association/lookup tables)。我已经为我的联接试验了 select
和 include
,但它们的结构是嵌套的 JSON.
users = await prisma.user.findMany({
include: {
user_school: {
include: {
school: true,
},
},
},
{
"id": "1",
"email": "student1@email.com",
"user_school": [
{
"id": 1,
"user_id": "1",
"school_id": "1",
"school": {
"id": 1,
"school_name": "mountain high",
}
}
],
}
目前无法将结果拉平。
实现此目的的唯一方法是使用您提到的 rawQuery。
但是,现有的 Feature Request 讨论了通过提供选项 flatten:true
来拉平结果。如果您可以在那里提及您的用例并添加评论,这将有助于 Prisma 的产品和工程团队确定它的优先级。
Prisma 是否能够将嵌套字段从另一个 table 连接移动到结果的顶层,如平面视图?我想将结果 JSON 放入前端 table 而无需挖掘嵌套对象并构建另一个对象。
例如,我想复制此行为,以便我可以从不同的 table 中挑选列(来自用户和学校的列)。目前我使用类似 SQL 的原始查询,但是我想知道是否可以仅使用 Prisma API:
SELECT
u.id
, u.email
, s.school_name
FROM "User" AS u
JOIN "UserSchool" AS us ON us.user_id = u.id
JOIN "School" AS s ON s.id = us.school_id
id | email | school_name
123| student1@email.com | mount high
I want JSON that looks like this:
{
"id": "1",
"email": "student1@email.com",
"school_name": "mount high",
}
如果我在 Prisma 中这样做,我将需要进入多层嵌套对象才能在另一个 table 上获得相同的列名,例如user[user_school][schoo][school_name]
。这需要额外的工作来遍历我的所有结果,从嵌套对象中提取,并构建另一个对象。这个例子还不错,但我有更多的连接和深层嵌套的对象来解决我的实际问题(很多 association/lookup tables)。我已经为我的联接试验了 select
和 include
,但它们的结构是嵌套的 JSON.
users = await prisma.user.findMany({
include: {
user_school: {
include: {
school: true,
},
},
},
{
"id": "1",
"email": "student1@email.com",
"user_school": [
{
"id": 1,
"user_id": "1",
"school_id": "1",
"school": {
"id": 1,
"school_name": "mountain high",
}
}
],
}
目前无法将结果拉平。
实现此目的的唯一方法是使用您提到的 rawQuery。
但是,现有的 Feature Request 讨论了通过提供选项 flatten:true
来拉平结果。如果您可以在那里提及您的用例并添加评论,这将有助于 Prisma 的产品和工程团队确定它的优先级。