Generazione
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
TypeORM può generare automaticamente file di migrazione confrontando le modifiche apportate alle entità con lo schema del database esistente sul server.
La generazione automatica delle migrazioni crea un nuovo file e inserisce tutte le query SQL necessarie per aggiornare il database. Se non vengono rilevate modifiche, il comando terminerà con codice 1.
Supponiamo di avere un'entità Post con una colonna title, e di aver cambiato il nome title in name.
Puoi generare la migrazione con il seguente comando:
typeorm migration:generate -d <path/to/datasource> <migration-name>
Il valore dell'argomento -d deve specificare il percorso in cui è definita la tua istanza DataSource.
In alternativa puoi specificare un nome con il parametro --name
typeorm migration:generate -- -d <path/to/datasource> --name=<migration-name>
oppure usare un percorso completo:
typeorm migration:generate -d <path/to/datasource> <path/to/migrations>/<migration-name>
Supponendo di aver usato post-refactoring come nome, verrà generato un nuovo file chiamato {TIMESTAMP}-post-refactoring.ts con questo contenuto:
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"`,
)
}
}
In alternativa, puoi generare le migrazioni come file Javascript usando il flag o (abbreviazione di --outputJs). Utile per progetti solo Javascript senza pacchetti TypeScript aggiuntivi. Questo comando genererà un nuovo file {TIMESTAMP}-PostRefactoring.js con questo contenuto:
/**
* @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"`,
)
}
}
Per impostazione predefinita, genera codice Javascript CommonJS con il flag o (abbreviazione di --outputJs), ma puoi generare codice ESM con il flag esm. Utile per progetti Javascript che usano 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"`,
)
}
}
Come vedi, non devi scrivere manualmente le query.
La regola d'oro è generare le migrazioni dopo ogni modifica ai tuoi modelli. Per applicare la formattazione multilinea alle query generate, usa il flag p (abbreviazione di --pretty).