- TypeORM 教程
- TypeORM - 首頁
- TypeORM - 簡介
- TypeORM - 安裝
- TypeORM - 建立一個簡單的專案
- TypeORM - 連線 API
- TypeORM - 實體
- TypeORM - 關係
- TypeORM - 使用 Repository
- TypeORM - 使用 Entity Manager
- TypeORM - 查詢構建器
- TypeORM - 查詢操作
- TypeORM - 事務
- TypeORM - 索引
- TypeORM - 實體監聽器和日誌
- TypeORM 與 JavaScript
- TypeORM - 使用 MongoDB
- TypeORM 與 Express
- TypeORM - 遷移
- TypeORM - 使用 CLI
- TypeORM 有用資源
- TypeORM - 快速指南
- TypeORM - 有用資源
- TypeORM - 討論
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> {
}
}
這裡,
我們有兩個方法 up 和 down。up 方法用於向遷移新增更改,而 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
上述命令執行遷移並按順序執行它們。現在,您可以在螢幕上看到以下更改:
輸出
現在開啟您的 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 使編寫資料庫遷移指令碼變得容易。
廣告