es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    El problema aquí está con el argumento references en el atributo @relation del modelo ProgramEnrollment. El modelo ProgramEnrollment no tiene un campo llamado id, por lo que no puede hacer referencia a él.

    En su lugar, deberías usar el campo programId en el argumento references para referirte al campo id en el modelo Program.

    Así es como debería verse el código:

    modelo ProgramEnrollment {
      program                 Programa     @relation(fields: [programId], references: [id])
      programId               Int // campo escalar de relación (usado en el atributo `@relation` de arriba)
      usuario                    Usuario @relation(fields: [userId], references: [id])
      userId                  Int // campo escalar de relación (usado en el atributo `@relation` de arriba)
      asignadoEn              DateTime @default(now())
    
      loggedWorkoutSet        ConjuntoDeEntrenamientoRegistrado[]
    
      @@id([programId, userId])
    }
    
    modelo ConjuntoDeEntrenamientoRegistrado {
      id              Int  @id @default(autoincrement())
      repeticiones            Int
      peso          Int
      completado       Boolean     @default(false)
    
      inscripción   ProgramEnrollment @relation(fields: [programId], references: [programId])
      programId Int // campo escalar de relación (usado en el atributo `@relation` de arriba)
    }
    

    Al cambiar el argumento references en el modelo ProgramEnrollment a [id], deberías deshacerte del error. Y el modelo ConjuntoDeEntrenamientoRegistrado puede usar el campo programId para hacer referencia al programa.

    Ahora, ProgramEnrollment tiene una relación uno a muchos con ConjuntoDeEntrenamientoRegistrado, donde ProgramEnrollment tiene muchos registros de ConjuntoDeEntrenamientoRegistrado.

Comments are closed.