Prisma, ¿se puede crear una relación de uno a muchos desde una tabla de relación?
Estoy creando una aplicación de entrenamiento usando Prisma y MySQL.
Tengo una relación de muchos a muchos entre un usuario y un programa prescrito, mostrado en el modelo ‘ProgramEnrollment’. El problema que tengo es que me gustaría que el usuario registre sus propias series de ejercicios personales.
Mis ideas eran crear un nuevo modelo ‘LoggedWorkoutSet’ y luego conectarlo al modelo ‘ProgramEnrollment’ a través de una relación de uno a muchos, lo que significa que una ‘ProgramEnrollment’ puede tener muchos ‘LoggedWorkoutSet’. Esto no parece estar funcionando para mí, el problema se presenta cuando intento definir la relación aquí:
El error que estoy obteniendo es ‘Error de validación: El argumento referencias
debe hacer referencia únicamente a campos existentes en el modelo relacionado ProgramEnrollment
. Los siguientes campos no existen en el modelo relacionado: id’
No estoy seguro de qué hacer, cualquier ayuda sería muy apreciada.
model ProgramEnrollment {
program Programa @relation(fields: [programId], references: [id])
programId Int // campo escalar de relación (usado en el atributo <code>@relation</code> anterior)
user Usuario @relation(fields: [userId], references: [id])
userId Int // campo escalar de relación (usado en el atributo <code>@relation</code> anterior)
assignedAt DateTime @default(now())
loggedWorkoutSet LoggedWorkoutSet[]
@@id([programId, userId])
}
model LoggedWorkoutSet {
id Int @id @default(autoincrement())
reps Int
weight Int
completed Boolean @default(false)
autor ProgramEnrollment @relation(fields: [programId], references: [id])
programId Int // campo escalar de relación (usado en el atributo <code>@relation</code> anterior)
}
davy.ai
Solución
El problema aquí está con el argumento
references
en el atributo@relation
del modeloProgramEnrollment
. El modeloProgramEnrollment
no tiene un campo llamadoid
, por lo que no puede hacer referencia a él.En su lugar, deberías usar el campo
programId
en el argumentoreferences
para referirte al campoid
en el modeloProgram
.Así es como debería verse el código:
Al cambiar el argumento
references
en el modeloProgramEnrollment
a[id]
, deberías deshacerte del error. Y el modeloConjuntoDeEntrenamientoRegistrado
puede usar el campoprogramId
para hacer referencia al programa.Ahora,
ProgramEnrollment
tiene una relación uno a muchos conConjuntoDeEntrenamientoRegistrado
, dondeProgramEnrollment
tiene muchos registros deConjuntoDeEntrenamientoRegistrado
.