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 實體

讓我們在 src/entity/Book.ts 中建立一個名為 Book 的實體,如下所示:

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

這裡,

我們有兩個方法 updownup 方法用於向遷移新增更改,而 down 方法用於撤消遷移中的更改。

讓我們在 myMigration.ts 檔案中新增 up 方法,如下所示:

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

這裡,

我們在 book 表中添加了一個新列 price。現在,執行 CLI 以新增上述更改。

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

上述命令執行遷移並按順序執行它們。現在,您可以在螢幕上看到以下更改:

輸出

Executes Migrations

現在開啟您的 mysql 伺服器,添加了新列。如下所示:

Open Mysql Server

類似地,我們可以將列標題資料型別修改為 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

輸出

Command

Book 表被修改為:

Book Table

撤消遷移

讓我們在 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

您會看到以下響應:

輸出

Response

Book 表被修改為:

輸出

Database Migration Script

正如我們在本章中所看到的,TypeORM 使編寫資料庫遷移指令碼變得容易。

廣告

© . All rights reserved.