创建新迁移

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

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