首页 > 解决方案 > Nodejs Prisma 包含不尊重祖父母身份

问题描述

我在 nodejs 中使用 prisma orm 并具有以下架构(示例)


model User
{
    id  Int @id @default(autoincrement())
    answers Answer[]

}

model Product
{
    id  Int @id @default(autoincrement())
    questions  Question[]
}

model Question
{
    id  Int @id @default(autoincrement())

    products    Product[]
    answers     Answer[]
}

model Answer
{
    id  Int @id @default(autoincrement())

    userId Int
    user User @relation(fields: [userId], references: [id])

    productId Int
    product Product @relation(fields: [productId], references: [id])

    questionId Int
    question Question @relation(fields: [questionId], references: [id])
}

是否可以获得带有问题的产品列表以及每个问题的最新答案?

我遇到的问题是,嵌套包含不尊重祖父母身份。

例如,在这段代码中:

let products = await prisma.product.findMany({
    include: {
        questions: {
            include: {
                answers: true
            }
        }
    }
})

每个问题的返回答案也不属于我希望他们属于的产品。

我错过了什么?

标签: node.jstypescriptprisma

解决方案


据我所知,无法进行您要查找的查询(嵌套包含的第二层也尊重祖父母 ID)。

一种可能的解决方法是将答案查询中的问题一起包含,product而不是将其嵌套在questions. 然后你可以在应用层合并问题和答案(在后端或前端,以最合适的为准)。

代码看起来像这样

    let products = await prisma.product.findMany({
        include: {
            questions: true,
            answers: true,  // Assuming the relation field is called answers. You confirmed you accidentally forgot to mention the field in your schema. 
        },
    });

// In Javascript/Typescript: For every product, iterate across every answer and add to the questions array.

如果产品/答案的数量不是很大,这种解决方法应该可以很好地工作。


推荐阅读