Generieren
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
TypeORM kann automatisch Migrationsdateien generieren, indem es die von Ihnen vorgenommenen Änderungen an Entitäten mit dem vorhandenen Datenbankschema auf dem Server vergleicht.
Die automatische Migrationsgenerierung erstellt eine neue Migrationsdatei und schreibt alle SQL-Abfragen, die zur Datenbankaktualisierung ausgeführt werden müssen. Werden keine Änderungen erkannt, beendet sich der Befehl mit Code 1.
Angenommen, Sie haben eine Post-Entität mit einer title-Spalte und ändern den Spaltennamen von title zu name.
Sie können die Migration mit folgendem Befehl generieren:
typeorm migration:generate -d <path/to/datasource> <migration-name>
Der Wert des -d-Arguments sollte den Pfad angeben, wo Ihre DataSource-Instanz definiert ist.
Alternativ können Sie einen Namen mit dem --name-Parameter angeben
typeorm migration:generate -- -d <path/to/datasource> --name=<migration-name>
oder einen vollständigen Pfad verwenden:
typeorm migration:generate -d <path/to/datasource> <path/to/migrations>/<migration-name>
Wenn Sie post-refactoring als Namen verwenden, generiert TypeORM eine Datei {TIMESTAMP}-post-refactoring.ts mit folgendem Inhalt:
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"`,
)
}
}
Alternativ können Sie Migrationen auch als JavaScript-Dateien ausgeben, indem Sie das o-Flag (Alias für --outputJs) verwenden. Dies ist für reine JavaScript-Projekte nützlich, in denen TypeScript-Pakete nicht installiert sind. Dieser Befehl generiert eine neue Migrationsdatei {TIMESTAMP}-PostRefactoring.js mit folgendem Inhalt:
/**
* @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"`,
)
}
}
Standardmäßig generiert es mit dem o-Flag (Alias für --outputJs) CommonJS-JavaScript-Code. Sie können aber auch ESM-Code mit dem esm-Flag generieren. Dies ist für JavaScript-Projekte nützlich, die ESM verwenden:
/**
* @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"`,
)
}
}
Wie Sie sehen, müssen Sie die Abfragen nicht manuell schreiben.
Generieren Sie Migrationen als Faustregel nach jeder Änderung an Ihren Modellen. Für mehrzeilige Formatierung der Migrationsabfragen verwenden Sie das p-Flag (Alias für --pretty).