TypeORM - Migraciones

Las migraciones son como el control de versiones de su base de datos. Se utiliza para modificar y compartir el esquema de la base de datos de la aplicación. Esta sección explica cómo funcionan las migraciones en TypeORM.

Creando nueva migración

Para crear una nueva migración, primero debemos configurar la conexión en ormconfig.json. Se define a continuación:

ormconfig.json

"type": "mysql", 
"host": "localhost", 
"port": 8889, 
"username": "root", 
"password": "root", 
"database": "Library", 
"entities": ["entity/*.js"], "migrationsTableName": "student_migration_table", "migrations": ["migration/*.js"], "cli": { 
   "migrationsDir": "migration" 
}

Aquí,

  • migrationsTableName - hace referencia al nombre de la tabla de migración.
  • migrations - TypeORM carga las migraciones desde un directorio determinado.
  • cli - indica que la migración se creará dentro del directorio específico.

Crear entidad de libro

Creemos una entidad llamada Book entidad dentro src/entity/Book.ts como sigue -

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; 
@Entity() 
export class Book { 

   @PrimaryGeneratedColumn() 
   id: number; 
   
   @Column() 
   title: string;
   
   @Column() 
   text: string; 
}

Ejecute CLI para crear una nueva migración

Ahora, podemos ejecutar una nueva migración usando CLI de la siguiente manera:

Sintaxis

typeorm migration:create -n <migration-name>

Ejemplo

typeorm migration:create -n myMigration

Después de ejecutar el comando anterior, podría ver la siguiente respuesta:

Migration /path/to/project/src/migration/1587101104904-myMigration.ts has been generated successfully.

Ahora, muévete adentro src/migration/1587101104904-myMigration.ts archivo se parece a esto.

import {MigrationInterface, QueryRunner} from "typeorm"; 

export class myMigration1587101104904 implements MigrationInterface {      

   public async up(queryRunner: QueryRunner): Promise<any> { 
   } 
   
   public async down(queryRunner: QueryRunner): Promise<any> { 
   } 
}

Aquí,

Tenemos dos métodos up y down. up El método se utiliza para agregar cambios a la migración y down El método se utiliza para revertir los cambios en su migración.

Agreguemos up método dentro myMigration.ts archivo como se especifica a continuación -

import {MigrationInterface, QueryRunner} from "typeorm"; 

export class Book1587131893261 implements MigrationInterface { 

   public async up(queryRunner: QueryRunner): Promise<any> { 
      await queryRunner.query(`ALTER TABLE book ADD COLUMN price int`); 
   }
   public async down(queryRunner: QueryRunner): Promise<any> { } 
}

Aquí,

Hemos agregado una nueva columna price dentro bookmesa. Ahora, ejecute la CLI para agregar los cambios anteriores.

ts-node ./node_modules/typeorm/cli.js migration:run

El comando anterior ejecuta migraciones y las ejecuta en una secuencia. Ahora, puede ver los siguientes cambios en su pantalla:

Salida

Ahora abra su servidor mysql, se agrega una nueva columna. Se muestra a continuación:

De manera similar, podemos modificar el tipo de datos del título de la columna a varchar (30) de la siguiente manera,

import {MigrationInterface, QueryRunner} from "typeorm"; 

export class Book1587131893261 implements MigrationInterface { 

   public async up(queryRunner: QueryRunner): Promise<any> { 
   await queryRunner.query(`ALTER TABLE book MODIFY COLUMN title varchar(30)`); 
      } 
   public async down(queryRunner: QueryRunner): Promise<any> { 
   } 
}

Ahora, ejecute el mismo comando y podrá realizar los siguientes cambios:

ts-node ./node_modules/typeorm/cli.js migration:run

Salida

Book la tabla se modifica como,

Revertir la migración

Agreguemos el siguiente código dentro down método para revertir la migración -

import {MigrationInterface, QueryRunner} from "typeorm"; 

export class Book1587131893261 implements MigrationInterface { 
   
   public async up(queryRunner: QueryRunner): Promise<any> { 
   
   } 
   public async down(queryRunner: QueryRunner): Promise<any> { 
      await queryRunner.query(`ALTER TABLE book drop column price`); // reverts things made in "up" method 
   } 
}

Ahora, ejecute el siguiente comando para revertir todos los cambios:

ts-node ./node_modules/typeorm/cli.js migration:revert

Podrías ver la siguiente respuesta:

Salida

Book la tabla se modifica como,

Salida

Como vimos en este capítulo, TypeORM facilita la escritura de un script de migración de la base de datos.