How to get the count of a relationship using Prisma
Example Problem
Imagine we want to build a page to display all our posts including the number of comments on each post. Something like this…
Prisma Schema
Let’s start off by defining a Prisma schema that we can use in our example. We’ll create a Post
and Comment
table. Each post can have many comments on it.
model Post {
id Int @id @default(autoincrement())
title String
body String
comments Comment[]
createdAt DateTime @default(now())
}
model Comment {
id Int @id @default(autoincrement())
comment String
author String
post Post @relation(fields: [postId], references: [id])
postId Int
createdAt DateTime @default(now())
}
Code
You can use the include
property and the _count
property inside of include
to the get the count of any relationships.
This will add a _count
property on your query results where you can get the count of the comments.
const prisma = new PrismaClient();
const postsWithCommentCount = await prisma.post.findMany({
include: {
_count: {
select: {
comments: true,
}
}
}
})
return {
posts: postsWithCommentCount.map((post) => ({
id: post.id,
title: post.title,
body: post.body,
commentCount: post._count.comments
createdAt: post.createdAt,
}))
}