TypeORM-移行

移行は、データベースのバージョン管理のようなものです。これは、アプリケーションのデータベーススキーマを変更および共有するために使用されます。このセクションでは、TypeORMでの移行の仕組みについて説明します。

新しい移行の作成

新しい移行を作成するには、最初にormconfig.jsonで接続を設定する必要があります。以下に定義されています-

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

ここに、

  • migrationsTableName −移行テーブル名を参照します。
  • migrations − TypeORMは、指定されたディレクトリから移行をロードします。
  • cli −特定のディレクトリ内に移行が作成されることを示します。

Bookエンティティを作成する

という名前のエンティティを作成しましょう Book 内部のエンティティ src/entity/Book.ts 次のように-

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

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

CLIを実行して新しい移行を作成します

これで、次のようにCLIを使用して新しい移行を実行できます。

構文

typeorm migration:create -n <migration-name>

typeorm migration:create -n myMigration

上記のコマンドを実行すると、次の応答が表示されます-

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

さあ、中に入って src/migration/1587101104904-myMigration.ts ファイルは次のようになります。

import {MigrationInterface, QueryRunner} from "typeorm"; 

export class myMigration1587101104904 implements MigrationInterface {      

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

ここに、

2つの方法があります up そして downup メソッドは、移行に変更を追加するために使用され、 down メソッドは、移行の変更を元に戻すために使用されます。

追加しましょう up 内部のメソッド myMigration.ts 以下に指定されているファイル-

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

ここに、

新しい列を追加しました price 内部 bookテーブル。ここで、CLIを実行して上記の変更を追加します。

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

上記のコマンドは、移行を実行し、それらを順番に実行します。これで、画面に次の変更が表示されます-

出力

次に、mysqlサーバーを開き、新しい列を追加します。以下に示します-

同様に、次のように列タイトルのデータ型をvarchar(30)に変更できます。

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

ここで、同じコマンドを実行すると、以下の変更が可能になります-

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

出力

Book テーブルは次のように変更されます。

移行を元に戻す

以下のコードを中に追加しましょう down 移行を元に戻す方法-

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

次に、以下のコマンドを実行して、すべての変更を元に戻します-

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

次の応答を見ることができます-

出力

Book テーブルは次のように変更されます。

出力

この章で見たように、 TypeORM データベース移行スクリプトを簡単に作成できます。