【问题标题】:Nodejs Prisma include does not respect grandparent idNodejs Prisma 包含不尊重祖父母身份
【发布时间】:2021-10-04 13:26:57
【问题描述】:

我在 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
            }
        }
    }
})

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

我错过了什么?

【问题讨论】:

  • 我有两个问题。首先,如果单个Question可以与多个Product记录相关,那么为什么某个Question的答案只与一个Product相关。它不应该与Question 本身关联的所有Products 相关联吗?我对您的业务逻辑/领域一无所知,我可能是错的,所以澄清会有所帮助。其次,您的架构的UserProduct 模型中缺少Answer[] 关系,a。这是偶然的吗?
  • 目前只是评估,但这里是示例数据。例如,有“手机”和“手机壳”产品,问题是“您对产品的满意度如何”和“您对运输/包装的满意度如何”用户然后针对每个问题-产品对给出答案, 所以“你对你的产品满意吗”——对于产品“手机”和你对你的产品满意吗”——对于产品“手机壳”和第二个问题类似。关于 Answer[] 关系,它的意外是,我会编辑。

标签: node.js typescript prisma


【解决方案1】:

据我所知,无法进行您要查找的查询(第二层嵌套包含也尊重祖父母 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.

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2016-08-18
    相关资源
    最近更新 更多