- 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 使编写数据库迁移脚本变得容易。
广告