Skip to main content

TypeORM migrate

以下是使用 TypeORM 作為資料庫工具的簡單範例。假設您已經安裝了 TypeORM。

在 NestJS 中,遷移(migration)通常是與資料庫相關的概念,用於同步資料庫模式與應用程式模型之間的變更。NestJS 本身並沒有提供直接的資料庫遷移工具,但是您可以使用其他流行的資料庫工具來執行遷移。

安裝 TypeORM CLI & 初始化

  1. 安裝 TypeORM CLI:
npm install -g typeorm
  1. 初始化 TypeORM 設定:
typeorm init --database mysql

此命令會在專案根目錄中生成一個 ormconfig.json 檔案,您可以在其中配置資料庫連接。

  1. 建立遷移:
typeorm migration:create migrations/YourMigrationName

這將在 src/migrations 目錄中建立一個新的遷移檔案。

  1. 編輯遷移檔案:

打開剛剛建立的遷移檔案,可以在 up 方法中定義新的表格、欄位等,然後在 down 方法中定義撤銷這些變更的邏輯。

// src/migrations/your_migration_name.ts
import { MigrationInterface, QueryRunner } from "typeorm";

export class YourMigrationName1609451422500 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("CREATE TABLE your_table ..."); // 定義新表格
await queryRunner.query("ALTER TABLE your_table ADD COLUMN your_column ..."); // 定義新欄位等
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("DROP TABLE your_table"); // 撤銷建立的表格
await queryRunner.query("ALTER TABLE your_table DROP COLUMN your_column"); // 撤銷新增的欄位等
}
}

這將撤銷最後一次執行的遷移。

請注意,上述命令中的 your_migration_nameyour_tableyour_column 等是範例,您需要根據您的實際情況進行修改。此外,根據資料庫類型和設定,遷移的具體語法可能有所不同。在使用遷移之前,請確保您已經正確配置了資料庫連接和 TypeORM 設定。

運行遷移

要運行 TypeORM 的遷移,你需要確保你的 dataSource 設置正確,並且在 package.json 中添加相應的腳本。以下是具體步驟:

  1. 創建 data-source.ts 文件: 在 src 目錄下創建一個 data-source.ts 文件,並配置你的資料庫連接。
src/data-source.ts
import { DataSource } from "typeorm";
import { config } from "dotenv";
config();

export const AppDataSource = new DataSource({
type: "mysql",
host: process.env.MYSQL_HOST || "localhost",
port: process.env.MYSQL_PORT ? parseInt(process.env.MYSQL_PORT) : 3306,
username: process.env.MYSQL_USER || "root",
password: process.env.MYSQL_PASSWORD || "",
database: process.env.MYSQL_DATABASE,
entities: ["dist/**/*.entity{.ts,.js}"],
migrations: ["dist/migrations/*{.ts,.js}"],
synchronize: false,
});
  1. 更新 package.json: 在 package.json 中添加運行遷移的腳本。
package.json
{
"scripts": {
"migration:run": "typeorm migration:run -d src/data-source.ts"
}
}
  1. 執行遷移:
typeorm migration:run

這將應用所有未應用的遷移。

  1. 還原遷移:
typeorm migration:revert