Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.1K
Visualizações
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!

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

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.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda