Prisma计数嵌套田(多对多)

发布于 2025-01-22 11:24:59 字数 964 浏览 0 评论 0原文

在我的Prisma模式中,我有类似的东西:

model Parent {
    id       String  @id @db.Uuid
    children Child[]
}

model ChildOfChild {
    id       String @id @db.Uuid
    parentId String @map("parent_id") @db.Uuid
    status   Status
    parent   Child  @relation(fields: [parentId], references: [id])

}

model Child {
    id       String         @id @db.Uuid
    parentId String         @map("parent_id") @db.Uuid
    parent   Parent         @relation(fields: [parentId], references: [id])
    children ChildOfChild[]
}

我想做类似的事情: 计数:parent.id and parent.Children.Children.Status。

使用QueryBuilder,它应该看起来像:

qb //root is Parent with alias r
    .leftJoin("r.children", "s")
    .leftJoin("s.children", "p")
    .groupBy(["id", "p.status"])
    .select(["count(*) as count", "r.id", "p.status"])

我可以在Prisma中做类似的事情,还是应该求助于RAW SQL查询?

In my prisma schema I have something like that:

model Parent {
    id       String  @id @db.Uuid
    children Child[]
}

model ChildOfChild {
    id       String @id @db.Uuid
    parentId String @map("parent_id") @db.Uuid
    status   Status
    parent   Child  @relation(fields: [parentId], references: [id])

}

model Child {
    id       String         @id @db.Uuid
    parentId String         @map("parent_id") @db.Uuid
    parent   Parent         @relation(fields: [parentId], references: [id])
    children ChildOfChild[]
}

And I want to do something like:
Count by: Parent.id and Parent.children.children.status.

With querybuilder it should look something like:

qb //root is Parent with alias r
    .leftJoin("r.children", "s")
    .leftJoin("s.children", "p")
    .groupBy(["id", "p.status"])
    .select(["count(*) as count", "r.id", "p.status"])

Can I do something like that in Prisma or should I resort to raw SQL query?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

歌入人心 2025-01-29 11:24:59

您可以使用count操作员获取嵌套字段的计数:计数参考

这是使用计数运算符的示例:

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  await prisma.parent.count({
    where: {
      id: '1',
      children: {
        every: {
          children: {
            every: {
              status: 'active',
            },
          },
        },
      },
    },
  });
}

main()
  .catch((e) => {
    throw e;
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

You can use the count operator to get count for nested fields: Count Reference

Here's an example of using count operator:

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  await prisma.parent.count({
    where: {
      id: '1',
      children: {
        every: {
          children: {
            every: {
              status: 'active',
            },
          },
        },
      },
    },
  });
}

main()
  .catch((e) => {
    throw e;
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文