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.