Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

319
Vistas
Agregación de relación Prisma 3 (suma)

Tengo algunos problemas para obtener la suma de los datos relacionados.

Este es mi esquema:

 model Vote { userId Int user User @relation(fields: [userId], references: [id]) itemId Int item Item @relation(fields: [itemId], references: [id]) value Int @@id([userId, itemId]) } model Item { id Int @id @default(autoincrement()) userId Int user User @relation(fields: [userId], references: [id]) listId Int list List @relation(fields: [listId], references: [id]) votes Vote[] body String @db.VarChar(255) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model List { id Int @id @default(autoincrement()) userId Int user User @relation(name: "Ownership", fields: [userId], references: [id]) items Item[] sharedWith User[] @relation(name: "Shared") title String @db.VarChar(255) description String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model User { id Int @id @default(autoincrement()) email String @unique password String name String? lists List[] @relation(name: "Ownership") items Item[] votes Vote[] sharedWith List[] @relation(name: "Shared") createdAt DateTime @default(now()) updatedAt DateTime @updatedAt }

Lo que estoy tratando de conseguir es:

  • 1 lista por ID
  • Elementos de lista incluidos
  • Y para cada elemento, la suma de los valores (de la tabla de votos).

Esto es lo que se me ocurrió:

 prisma.list.findUnique({ where: { id }, include: { items: { include: { votes: { include: { _sum: { select: { value: true, }, }, }, }, }, }, }, })

Construí consultas basadas en múltiples consultas diferentes que encontré en línea (la mayoría de ellas en Prisam Docs).

También noté que a Prisma Docs le faltan muchas cosas, como (agregar/eliminar datos relacionados, relación de muchos a muchos). ¿Hay mejores documentos o proyectos de ejemplo con cosas como estas?

¡Gracias!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Esto no es posible actualmente como una sola consulta. Lo que puede hacer es sumar los valores después de recuperarlos.

Creé un ejemplo similar basado en StackOverflow. Dado el siguiente Esquema Prisma:

 // This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema datasource db { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" } model User { id Int @id @default(autoincrement()) name String votes Vote[] questions Question[] } model Question { id Int @id @default(autoincrement()) question String votes Vote[] user User @relation(fields: [userId], references: [id]) userId Int } model Vote { id Int @id @default(autoincrement()) value Int @default(1) questionId Int question Question @relation(fields: [questionId], references: [id]) user User @relation(fields: [userId], references: [id]) userId Int }

Puedes escribir el siguiente script:

 import { PrismaClient } from "@prisma/client" const prisma = new PrismaClient() async function main() { const users = await prisma.user.findMany({ include: { questions: { include: { votes: { select: { value: true, }, }, }, }, }, }) for (let user of users) { for (let question of user.questions) { let vote_sum = 0 for (let vote of question.votes) { vote_sum += vote.value } ;(question as any).vote_sum = vote_sum } } console.dir(users, { depth: Infinity }) } main().catch((err) => console.error(err))

Luego sume los valores después de recuperar los datos.

Si esto no funciona bien para usted, lo animo a que escriba una solicitud de función para el equipo de Prisma.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda