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

672
Visualizações
Prisma: actualiza entidades anidadas en una sola consulta

Estoy usando Prisma y Express.js para realizar solicitudes a mi tabla de base de datos MySQL.

Tengo una relación de uno a muchos entre mis tablas de rondas de concursos y estoy tratando de escribir una consulta que me permita actualizar rondas de forma diferente para un concurso determinado. Dado el esquema:

 model Contest { id Int @id @default(autoincrement()) name String @unique rounds Round[] ... other fields } model Round { id Int @id @default(autoincrement()) name String contestId Int contest Contest @relation(fields: [contestId], references: [id], onDelete: Cascade) ... other fields }

Lo que quiero lograr es actualizar el concurso de

 { id: 100, name: 'contest1', rounds: [ { id: 1, name: 'round1', contestId: 100, }, { id: 2, name: 'round2', contestId: 100, } ]

a por ejemplo

 { id: 100, name: 'contest1', rounds: [ { id: 1, name: 'round1Updated', contestId: 100, }, { id: 2, name: 'round2UpdatedDifferently', contestId: 100, } ]

donde los nombres redondos que obtengo del valor del formulario de HTML.

No he encontrado ningún ejemplo sobre la actualización de diferentes entidades anidadas, por lo que espero que sea algo como esto:

 var updated = await prisma.contest.update({ where: { id: 100 }, data: { name: data.name, rounds: { update: { where: { id: { in: [1, 2] }, }, data: { name: ['round1Updated', 'round2UpdatedDifferently'] }, }, } }, include: { rounds: true, } });

Cualquier idea o pista sería apreciada.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

¿Funcionará algo como esto?

 const updated = await prisma.contest.update({ where: { id: 100 }, data: { name: data.name, rounds: { deleteMany: { id: { in: [1, 2] } }, // Delete existing records first createMany: { // Update by creating new records data: [ { id: 1, name: "round1Updated" }, { id: 2, name: "round2UpdatedDifferently" }, ] } } }, include: { rounds: true } });

De los datos del formulario

 const updated = await prisma.contest.update({ where: { id: data.id }, data: { name: data.name, rounds: { deleteMany: { id: { in: data.rounds.map(({ id }) => id) } }, createMany: { data: rounds } } }, include: { rounds: true } });

Tenga en cuenta que el orden de las operaciones sí importa:
https://github.com/prisma/prisma/discusiones/6263

about 4 years ago · Juan Pablo Isaza Relatório

0

const updated = await prisma.contest.update({ where: {id: data.id}, data: { name: data.name, rounds: { deleteMany: {}, createMany: {data: rounds}, } }, include: {rounds: true}, });
about 4 years ago · Juan Pablo Isaza 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