Генерация миграций
Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →
TypeORM автоматически генерирует файлы миграций, анализируя изменения в ваших сущностях и сравнивая их с текущей схемой базы данных на сервере.
Автоматическая генерация создаёт новый файл миграции, записывая все SQL-запросы, необходимые для обновления БД. Если изменения не обнаружены, команда завершится с кодом 1.
Предположим, у вас есть сущность Post со столбцом title, и вы изменили название столбца с title на name.
Сгенерировать миграцию можно следующей командой:
typeorm migration:generate -d <path/to/datasource> <migration-name>
Аргумент -d должен указывать путь к файлу, где определён ваш экземпляр DataSource.
Дополнительно можно указать имя миграции через параметр --name
typeorm migration:generate -- -d <path/to/datasource> --name=<migration-name>
или использовать абсолютный путь:
typeorm migration:generate -d <path/to/datasource> <path/to/migrations>/<migration-name>
Если вы указали имя post-refactoring, будет создан файл {TIMESTAMP}-post-refactoring.ts с таким содержимым:
import { MigrationInterface, QueryRunner } from "typeorm"
export class PostRefactoringTIMESTAMP implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "title" RENAME TO "name"`,
)
}
async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "name" RENAME TO "title"`,
)
}
}
Для генерации JavaScript вместо TypeScript используйте флаг o (--outputJs). Это полезно для проектов на чистом JavaScript, где не установлены дополнительные пакеты TypeScript. Эта команда создаст новый файл миграции {TIMESTAMP}-PostRefactoring.js со следующим содержимым:
/**
* @typedef {import('typeorm').MigrationInterface} MigrationInterface
* @typedef {import('typeorm').QueryRunner} QueryRunner
*/
/**
* @class
* @implements {MigrationInterface}
*/
module.exports = class PostRefactoringTIMESTAMP {
/**
* @param {QueryRunner} queryRunner
*/
async up(queryRunner) {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "title" RENAME TO "name"`,
)
}
/**
* @param {QueryRunner} queryRunner
*/
async down(queryRunner) {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "name" RENAME TO "title"`,
)
}
}
По умолчанию генерируется код JavaScript в формате CommonJS с помощью флага o (псевдоним для --outputJs), но вы также можете генерировать код ESM с помощью флага esm. Это полезно для проектов на JavaScript, использующих ESM:
/**
* @typedef {import('typeorm').MigrationInterface} MigrationInterface
* @typedef {import('typeorm').QueryRunner} QueryRunner
*/
/**
* @class
* @implements {MigrationInterface}
*/
export class PostRefactoringTIMESTAMP {
/**
* @param {QueryRunner} queryRunner
*/
async up(queryRunner) {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "title" RENAME TO "name"`,
)
}
/**
* @param {QueryRunner} queryRunner
*/
async down(queryRunner) {
await queryRunner.query(
`ALTER TABLE "post" ALTER COLUMN "name" RENAME TO "title"`,
)
}
}
Как видите, вам не нужно самостоятельно писать запросы.