Doctrine migráció, lehet egyszerűbben?

Már nem először volt egy “kevés” szívás a Doctrine migrációkkal. Ma éppen az jött elő, hogy PostgreSQL tábla alatt kellett volna primary key-t cserélni. Ennek véghezvitelében “rengeteget” segített a Doctrine semmitmondó dokumentációja. A probléma lényege, hogy egy migráció kell a korábbi primary key eldobásához, egy pedig az új felvételéhez. Kész elmebaj.

Mielőtt végképp frusztrálni kezdett volna a dolog fogtam a db connection-t és nyers sql parancsokkal elintéztem a dolgot. Megvolt 5 perc alatt, azt csinálta, amit én szeretnék, ráadásul még ismerem is.

Ezzel párhuzamosan elgondolkoztam, hogy mi is egy migrációt kezelő alrendszer lényege (és miért ilyen bonyolult a Doctrine). Alapvetően két osztálytípusra van szükség:

  1. egy menedzser osztályra, amely vezérli a migrációt egyik lépésről egy másikra
  2. egy (jobban mondva több) osztály, amely(ek) az egyes migrációs lépéseket reprezentálják

Nézzük a másodikat, az ugyanis az egyszerűbb. Itt egy interface-t kell definiálnunk, amit bármilyen osztály megvalósíthat:

interface MigrationStep
{
  public function up(PDO $con);

  public function down(PDO $con);
}

A menedzser osztály kicsit bővebb🙂

class MigrationManager
{
  private $_pdo;

  public function __construct(PDO $pdo)
  {
    $this->_pdo = $pdo;
  }

  public function migrateTo($step = null)
  {
    // migrál a megadott lépésig, null esetén a legfrissebb állapotig
    // végigmegy a lépéseken az aktuális állapottól (->getVersion()) a $step-ig
    // közben betölti a lépést, példányoítja, futtatja, minden lépés végén menti a verziót
  }

  public function getMigrations()
  {
    // visszaadja a migrációs lépéseket tartalmazó file tömbjét
    // migrációs lépés száma => file elérési útja párként
  }

  public function getVersion()
  {
    // visszaadja az aktuális verziót
  }

  public function setVersion()
  {
    // beállítja a migrált verziót
  }
}

Ehhez kell néhány megállapodást tenni:

  1. a migrációs lépések egy könyvtárban vannak
  2. a migrációs lépés file-ok formátuma LÉPÉS_OSZTÁLYNÉV
    pl. 12_ArticlePrimarykeyUpdate.php

Úgy gondolom ennyi a migráció és nem több. Ennyire van szükség. A Doctrine által bevezetett plusz API csak kavarás, felesleges tanulnivaló (lenne, ha érdekelne).

Kategória: Uncategorized
Címke: , ,
Közvetlen link a könyvjelzőhöz.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s