- TypeORM教程
- TypeORM - 主页
- TypeORM - 简介
- TypeORM - 安装
- TypeORM - 创建一个简单的项目
- TypeORM - 连接 API
- TypeORM - 实体
- TypeORM - 关系
- TypeORM - 使用存储库
- TypeORM - 使用实体管理器
- TypeORM - 查询生成器
- TypeORM - 查询操作
- TypeORM - 交易
- TypeORM - 索引
- TypeORM - 实体监听器和日志记录
- 使用 JavaScript 进行 TypeORM
- TypeORM - 使用 MongoDB
- 使用 Express 进行 TypeORM
- 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 - 它指的是迁移表名称。
- 迁移- TypeORM 从给定目录加载迁移。
- cli - 指示迁移将在特定目录内创建。
创建图书实体
让我们在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方法用于恢复迁移中的更改。
让我们在myMigration.ts文件中添加方法,如下所示 -
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> { } }
这里,
我们在图书表中添加了一个新的价格列。现在,执行 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
输出
图书表修改为,
恢复迁移
让我们在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
您可以看到以下响应 -
输出
图书表修改为,
输出
正如我们在本章中看到的,TypeORM使编写数据库迁移脚本变得很容易。