创建新迁移
在创建新迁移之前,你需要正确设置连接选项:
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "test",
"password": "test",
"database": "test",
"entities": ["entity/*.js"],
"migrationsTableName": "custom_migration_table",
"migrations": ["migration/*.js"],
"cli": {
"migrationsDir": "migration"
}
}
这里我们设置三个选项:
"migrationsTableName": "migrations"
- 仅当需要迁移表名称与migrations
不同时才指定此选项。"migrations": ["migration/*.js"]
- 表示 typeorm 必须从给定的”migration”目录加载迁移。"cli": { "migrationsDir": "migration" }
- 表示 CLI 必须在”migration”目录中创建新的迁移。
设置连接选项后,可以使用 CLI 创建新的迁移:
typeorm migration:create -n PostRefactoring
要使用 CLI 命令,需要全局安装 typeorm(npm i typeorm -g
)。此外,请确保你本地 typeorm 版本与全局版本匹配。了解更多有关TypeORM CLI的信息。
此处PostRefactoring
是迁移的名称 - 你可以指定任何想要的名称。运行该命令后,可以在”migration”目录中看到一个名为{TIMESTAMP} -PostRefactoring.ts
的新文件,其中{TIMESTAMP}
是生成迁移时的当前时间戳。现在你可以打开该文件并在那里添加迁移 sql 查询。
你应该可以在迁移中看到以下内容:
import { MigrationInterface, QueryRunner } from "typeorm";
export class PostRefactoringTIMESTAMP implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<any> {}
async down(queryRunner: QueryRunner): Promise<any> {}
}
你必须使用两种方法填写迁移代码:up
和down
。up
必须包含执行迁移所需的代码。down
必须恢复任何up
改变。down
方法用于恢复上次迁移。
在up
和down
里面有一个QueryRunner
对象。使用此对象执行所有数据库操作。了解有关query runner的更多信息。
让我们通过Post
更改看看迁移是什么样的:
import { MigrationInterface, QueryRunner } from "typeorm";
export class PostRefactoringTIMESTAMP implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "post" ALTER COLUMN "title" RENAME TO "name"`);
}
async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "post" ALTER COLUMN "name" RENAME TO "title"`); // 恢复"up"方法所做的事情
}
}