Symfony migráció

Adatbázis migráció-ra is van eszköz symfony-ban, ennek nézzük meg a parancsait.

Egy darab új migrációs fájl létrehozása:
 
# php bin/console doctrine:migrations:generate

Ha futtatni szeretnénk egy darab migrációt vagy vissza szeretnénk vonni:
 
# migrations:execute --up 20201211151514
# migrations:execute --down 20201211151514

Ha az összes különbséget szeretnénk le generálni, akkor a következő parancsal készít egy migrációs fájlt:
 
# php bin/console doctrine:migrations:diff

Futtatjuk az összes migrációt:
 
# php bin/console doctrine:migrations:migrate

Migráció állapota:
 
# php bin/console doctrine:migrations:status

Egy példa migrációs fájl, használhatunk natív sql-t, vagy az "sqlbuildert" is:
 
<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

/**
 * Auto-generated Migration: Please modify to your needs!
 */
final class Version20201211151514 extends AbstractMigration
{
    public function getDescription() : string
    {
        return '';
    }

    public function up(Schema $schema) : void
    {
        // this up() migration is auto-generated, please modify it to your needs

       $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 
              'Migration can only be executed safely on \'mysql\'.');

        $this->addSql('CREATE TABLE city (id INT AUTO_INCREMENT NOT NULL,
                       name VARCHAR(250) NOT NULL, 
                       zipcode VARCHAR(4) NOT NULL,
                       PRIMARY KEY(id))
                       DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');

        $table = $schema->createTable('city2');
        $table->addColumn('id', 'integer', array('unsigned' => true));
        $table->addColumn('name', 'string', array('length' => 250));
        $table->addColumn('zipcode', 'string', array('length' => 4));
        $table->setPrimaryKey(array('id'));
    }

    public function down(Schema $schema) : void
    {
        // this down() migration is auto-generated, please modify it to your needs
        $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 
               'Migration can only be executed safely on \'mysql\'.');

        $this->addSql('DROP TABLE city');

        $schema->dropTable('city2');
    }
}


Olvasnivaló:
https://symfony.com/doc/2.2/bundles/DoctrineMigrationsBundle/index.html
2020.09.19.