• 创建新迁移

    创建新迁移

    在创建新迁移之前,你需要正确设置连接选项:

    1. {
    2. "type": "mysql",
    3. "host": "localhost",
    4. "port": 3306,
    5. "username": "test",
    6. "password": "test",
    7. "database": "test",
    8. "entities": ["entity/*.js"],
    9. "migrationsTableName": "custom_migration_table",
    10. "migrations": ["migration/*.js"],
    11. "cli": {
    12. "migrationsDir": "migration"
    13. }
    14. }

    这里我们设置三个选项:

    • "migrationsTableName": "migrations" - 仅当需要迁移表名称与migrations不同时才指定此选项。
    • "migrations": ["migration/*.js"] - 表示 typeorm 必须从给定的”migration”目录加载迁移。
    • "cli": { "migrationsDir": "migration" } - 表示 CLI 必须在”migration”目录中创建新的迁移。

    设置连接选项后,可以使用 CLI 创建新的迁移:

    1. typeorm migration:create -n PostRefactoring

    要使用 CLI 命令,需要全局安装 typeorm(npm i typeorm -g)。此外,请确保你本地 typeorm 版本与全局版本匹配。了解更多有关TypeORM CLI的信息。

    此处PostRefactoring是迁移的名称 - 你可以指定任何想要的名称。运行该命令后,可以在”migration”目录中看到一个名为{TIMESTAMP} -PostRefactoring.ts的新文件,其中{TIMESTAMP}是生成迁移时的当前时间戳。现在你可以打开该文件并在那里添加迁移 sql 查询。

    你应该可以在迁移中看到以下内容:

    1. import { MigrationInterface, QueryRunner } from "typeorm";
    2. export class PostRefactoringTIMESTAMP implements MigrationInterface {
    3. async up(queryRunner: QueryRunner): Promise<any> {}
    4. async down(queryRunner: QueryRunner): Promise<any> {}
    5. }

    你必须使用两种方法填写迁移代码:updownup必须包含执行迁移所需的代码。down必须恢复任何up改变。down方法用于恢复上次迁移。

    updown里面有一个QueryRunner对象。使用此对象执行所有数据库操作。了解有关query runner的更多信息。

    让我们通过Post更改看看迁移是什么样的:

    1. import { MigrationInterface, QueryRunner } from "typeorm";
    2. export class PostRefactoringTIMESTAMP implements MigrationInterface {
    3. async up(queryRunner: QueryRunner): Promise<any> {
    4. await queryRunner.query(`ALTER TABLE "post" ALTER COLUMN "title" RENAME TO "name"`);
    5. }
    6. async down(queryRunner: QueryRunner): Promise<any> {
    7. await queryRunner.query(`ALTER TABLE "post" ALTER COLUMN "name" RENAME TO "title"`); // 恢复"up"方法所做的事情
    8. }
    9. }