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.