首页 > 解决方案 > 在 Prisma 中查询时,如何在嵌套关系中使用带有多个查询参数的“AND”运算符?

问题描述

这是我第一次尝试 prisma 并且被卡住了。所以我有“产品”和“过滤器”模型。

我希望以下查询起作用。这个想法是,我想获取具有动态匹配查询参数(名称和值)的产品。产品查询参数动态来自前端。

const products = await prisma.product.findMany({
        where: {
          categoryName,
          subCategoryName,
          filters: {
            some: {
              AND: [
                {
                  name: "RAM",
                  value: "32GB",
                },
                {
                  name: "Storage",
                  value: "1TB",
                },
              ],
            },
          },
        },
        include: {
          images: true,
        },
      });

如果只有一个参数,比如

{
  name:"RAM",
  value:"32GB"
}

查询返回适当的产品,但如果有多个查询参数(如上面的原始代码),则返回空数组。

我的产品架构看起来像这样,简化后,

  name                      String      
  filters                   Filter[]

我的过滤器架构看起来像这样,简化了

  name                      String      
  value                     String?
  product                   Product?    @relation(fields: [productId], references:[id])
  productId                 Int?

非常感谢

标签: node.jspostgresqlprismaprisma2

解决方案


我在这里找到了解决方案 https://github.com/prisma/prisma/discussions/8216#discussioncomment-992302

显然应该是这样的。

await prisma.product.findMany({
      where: {
        AND: [
          { price: 21.99 },
          { filters: { some: { name: 'ram', value: '8GB' } } },
          { filters: { some: { name: 'storage', value: '256GB' } } },
        ],
      },
})

推荐阅读