TypeORM - Migrações

As migrações são como o controle de versão do seu banco de dados. É usado para modificar e compartilhar o esquema do banco de dados do aplicativo. Esta seção explica como as migrações funcionam no TypeORM.

Criando nova migração

Para criar uma nova migração, primeiro precisamos configurar a conexão em ormconfig.json. É definido abaixo -

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" 
}

Aqui,

  • migrationsTableName - refere-se ao nome da tabela de migração.
  • migrations - TypeORM carrega migrações de determinado diretório.
  • cli - indica que a migração será criada dentro do diretório específico.

Criar entidade Livro

Vamos criar uma entidade chamada Book entidade dentro src/entity/Book.ts como segue -

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

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

Execute a CLI para criar uma nova migração

Agora, podemos executar uma nova migração usando CLI da seguinte maneira -

Sintaxe

typeorm migration:create -n <migration-name>

Exemplo

typeorm migration:create -n myMigration

Depois de executar o comando acima, você poderá ver a resposta abaixo -

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

Agora, vá para dentro src/migration/1587101104904-myMigration.ts arquivo é semelhante a este.

import {MigrationInterface, QueryRunner} from "typeorm"; 

export class myMigration1587101104904 implements MigrationInterface {      

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

Aqui,

Temos dois métodos up e down. up método é usado para adicionar mudanças à migração e down método é usado para reverter as alterações em sua migração.

Vamos adicionar up método dentro myMigration.ts arquivo conforme especificado abaixo -

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> { } 
}

Aqui,

Nós adicionamos uma nova coluna price dentro bookmesa. Agora, execute a CLI para adicionar as alterações acima.

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

O comando acima executa migrações e as executa em uma sequência. Agora, você pode ver as mudanças abaixo em sua tela -

Resultado

Agora abra seu servidor mysql, uma nova coluna é adicionada. É mostrado abaixo -

Da mesma forma, podemos modificar o tipo de dados do título da coluna para varchar (30) da seguinte forma,

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> { 
   } 
}

Agora, execute o mesmo comando e você poderá as alterações abaixo -

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

Resultado

Book a tabela é modificada como,

Reverter migração

Vamos adicionar o código abaixo dentro down método para reverter a migração -

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 
   } 
}

Agora, execute o comando abaixo para reverter todas as alterações -

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

Você pode ver a seguinte resposta -

Resultado

Book a tabela é modificada como,

Resultado

Como vimos neste capítulo, TypeORM torna mais fácil escrever um script de migração de banco de dados.