IIC2513-2022 / syllabus-2

Repositorio oficial de la sección 2 del periodo 2022-1 del curso PUC IIC2513 Tecnologías y Aplicaciones Web
33 stars 4 forks source link

Errores Comunes: Asociaciones #8

Open pedroherreraj opened 2 years ago

pedroherreraj commented 2 years ago

Han habido un problema muy repetido, que es un error en un archivo de migraciones en el que se agrega una relación a un modelo que no existe. Las migraciones en conjunto se pueden ver como una historial de los cambios hecho a la base de datos. Por ejemplo: 20210615195527-create-local.js 20210615200533-create-user.js

La primera migración crea un modelo Local, y la segunda un modelo User. Existe una relación entre ellos, que consiste en que un usuario tiene muchos locales(Has many locals), y un local tiene un solo usuario(belongs to user) Entonces Local tiene un atributo userId, que está definido en el archivo de migración de create-local como

      userId: {
        type: Sequelize.INTEGER,
        references: {
          model: 'users',
          key: 'id',
        },
      },

Pero esto al correr las migraciones trae un problema, debido a que si se fijan en las fechas de los nombres de los archivos de migración, se crea primero en nuestra base de datos el modelo Local que el User, y el primero tiene un atributo que hace referencia al segundo, el cual todavía no existe en nuestra base de datos, por lo que nos tirara un error. Qué deberíamos hacer en este caso? Eliminar del archivo de migración ese atributo(ya que las migraciones que vienen después no correrán debido a que el comando se corta por el error, por lo que no hay problema con modificar este archivo), y crear un nuevo archivo de migración que agregue esta relación. Cómo hacerlo lo pueden encontrar acá(fijense en los archivos de migración).

Es por el error anterior que es muy importante que no modifiquen los archivos de migración que ya fueron corridos. Si quieren hacer un cambio en la base de datos generen una migración nueva