TypeORM - Migrazioni

Le migrazioni sono come il controllo della versione per il tuo database. Viene utilizzato per modificare e condividere lo schema del database dell'applicazione. Questa sezione spiega come funzionano le migrazioni in TypeORM.

Creazione di una nuova migrazione

Per creare una nuova migrazione, prima dobbiamo impostare la connessione in ormconfig.json. È definito di seguito:

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

Qui,

  • migrationsTableName - fa riferimento al nome della tabella di migrazione.
  • migrations - TypeORM carica le migrazioni dalla directory data.
  • cli - indica che la migrazione verrà creata all'interno della directory specifica.

Crea entità Libro

Creiamo un'entità denominata Book entità all'interno src/entity/Book.ts come segue -

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

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

Esegui CLI per creare una nuova migrazione

Ora possiamo eseguire una nuova migrazione utilizzando la CLI come segue:

Sintassi

typeorm migration:create -n <migration-name>

Esempio

typeorm migration:create -n myMigration

Dopo aver eseguito il comando sopra, potresti vedere la risposta di seguito:

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

Adesso muoviti dentro src/migration/1587101104904-myMigration.ts il file è simile a questo.

import {MigrationInterface, QueryRunner} from "typeorm"; 

export class myMigration1587101104904 implements MigrationInterface {      

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

Qui,

Abbiamo due metodi up e down. up viene utilizzato per aggiungere modifiche alla migrazione e down viene utilizzato per annullare le modifiche nella migrazione.

Aggiungiamo up metodo all'interno myMigration.ts file come specificato di seguito -

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

Qui,

Abbiamo aggiunto una nuova colonna price dentro booktavolo. Ora, esegui la CLI per aggiungere le modifiche di cui sopra.

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

Il comando precedente esegue le migrazioni e le esegue in sequenza. Ora puoi vedere le modifiche di seguito sullo schermo:

Produzione

Ora apri il tuo server mysql, viene aggiunta una nuova colonna. È mostrato di seguito -

Allo stesso modo, possiamo modificare il tipo di dati del titolo della colonna in varchar (30) come segue,

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

Ora, esegui lo stesso comando e potresti le seguenti modifiche:

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

Produzione

Book la tabella viene modificata come,

Ripristina la migrazione

Aggiungiamo il codice seguente all'interno down metodo per annullare la migrazione -

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

Ora, esegui il comando seguente per annullare tutte le modifiche:

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

Potresti vedere la seguente risposta:

Produzione

Book la tabella viene modificata come,

Produzione

Come abbiamo visto in questo capitolo, TypeORM semplifica la scrittura di script di migrazione del database.