Prisma получает подсчет на основе одного поля

У меня есть таблица комментариев, в которой много взаимодействий.

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" } },
            },
        },
    },
})

Но как мне получить счет обоих.

Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это невозможно на данный момент с prisma

Чтобы подсчитать ваш comment_interactions, вам нужно запустить второй запрос, например

const count = await prisma.comment_interaction.groupBy({
  by: ["state"],
  where: {
    commentId: id
  },
  _count: {
    state: true,
  },
});

а затем объедините ваш запрос с контентом и этим

В противном случае вы можете сделать необработанный запрос, но это менее красиво

Другие вопросы по теме

Похожие вопросы

Исключение: ORA-08181: указанный номер не является допустимым номером изменения системы.
Когда пересобирать образ в докере?
Как сообщить родителям, что их ребенок был удален?
Стоит ли иметь таблицу, которая ссылается только на столбцы из родительской таблицы
Я всегда получаю сообщение об ошибке каждый раз, когда пытаюсь добавить данные в БД: SQLSTATE [42703]: Неопределенный столбец: 7 ОШИБКА: столбец
Laravel: Как обновить конкретный столбец с условием в контроллере?
Выбор минимального значения из двух таблиц и помещение их в одну таблицу
Как найти экземпляры объектов, которые имеют общие отношения с другим объектом?
Объедините несколько строк в одну, объединив значение одного столбца в формате CSV из двух таблиц.
FastAPI, SQLalchemy; Используя Postman, я не могу правильно опубликовать необработанный запрос тела JSON. Он отлично работает с параметрами, а не с необработанным телом JSON.