У меня есть таблица комментариев, в которой много взаимодействий.
model comment {
id Int @id @default(autoincrement())
content String
commenterId String
commenter User @relation("commented", fields: [commenterId], references: [id])
comment_interactions comment_interaction[]
}
таблица comment_interaction выглядит так
model comment_interaction {
userId String
commentId Int
state CommentInteraction
user User @relation(fields: [userId], references: [id])
comment comment @relation(fields: [commentId], references: [id])
@@unique([userId, commentId])
}
Здесь состояние представляет собой перечисление типа CommentInteraction.
enum CommentInteraction {
LIKED
DISLIKED
}
Теперь нужно запросить таблицу комментариев и получить количество как LIKED
взаимодействий, так и DISLIKED
взаимодействий. Я могу подсчитать любой из них только так:
const comments = await prisma.comment.findUnique({
where: { id },
select: {
id: true,
content: true,
_count: {
select: {
comment_interactions: { where: { state: "LIKED" } },
},
},
},
})
Но как мне получить счет обоих.
Это невозможно на данный момент с prisma
Чтобы подсчитать ваш comment_interactions
, вам нужно запустить второй запрос, например
const count = await prisma.comment_interaction.groupBy({
by: ["state"],
where: {
commentId: id
},
_count: {
state: true,
},
});
а затем объедините ваш запрос с контентом и этим
В противном случае вы можете сделать необработанный запрос, но это менее красиво