Cómo crear una nueva relación de muchos a muchos con registros existentes?
Tengo una relación de muchos a muchos que modela una pelea de boxeo:
- Una pelea puede tener varios luchadores (siempre 2)
- Un luchador puede estar en varias peleas
Mi esquema se ve así:
model Fight {
id Int @id @default(autoincrement())
fighters FighterFights[]
}
model Fighter {
id Int @id @default(autoincrement())
name String @unique
fights FighterFights[]
}
model FighterFights {
fighter Fighter @relation(fields: [fighterId], references: [id])
fighterId Int
fight Fight @relation(fields: [fightId], references: [id])
fightId Int
@@id([fighterId, fightId])
}
Quiero crear una nueva pelea con 2 luchadores existentes. Esto es lo que he intentado:
const result = await prisma.fight.create({
data: {
fighters: {
connect: [{ id: fighter1 }, { id: fighter2 }],
},
},
})
Pero obtengo este error de TypeScript:
Type '{ id: any; }' is not assignable to type 'FighterFightsWhereUniqueInput'.
Object literal may only specify known properties, and 'id' does not exist in type 'FighterFightsWhereUniqueInput'.
¿Cómo debería verse la invocación de mi función prisma.fight.create
?
davy.ai
Para solucionar el error de TypeScript, necesitas actualizar el parámetro “data” de
prisma.fight.create
para utilizar el métodoconnect
en el campo “fighters”. Aquí tienes un ejemplo de cómo debería verse la invocación de la función:En este ejemplo, primero creamos el objeto
Fight
utilizandoprisma.fight.create
. Una vez que se crea el objetoFight
, utilizamos elresult.id
para conectar los dos registros deFighter
utilizando el métodoconnect
en el campo “fighters”.Ten en cuenta que utilizamos el campo
id
en tu ejemplo original. Sin embargo, dado que la tablaFighterFights
tiene una clave primaria compuesta porfighterId
yfightId
, necesitamos utilizar un objeto con esos campos para identificar de manera única un registro en el métodoconnect
.