A
Rails keretrendszernek köszönhetően az elmúlt pár évben nagy teret hódított az
Adatbázis Migrációk (
Migrations) használata, még
PHP-s környezetben is. Személyesen hallottam olyanról, hogy míg az egész rendszer
PHP alatt futott, a programozók a
Rails-t használták
táblák és
kapcsolatok készítésére.
Persze több kevesebb sikerrel megjelentek
PHP-vel hajtott alkalmazások is, az egyik ilyen pl. a
Doctrine Project. Ebben a cikkben azonban a
Pieter Claerhout által publikált, és a
Yii alá készített
Yii-DbMigrations-t fogjuk ismertetni.
Mire jó ez egyáltalán?
Felmerülhet a kérdés, hogy miért is van szükség ilyen rendszerek használatára. A felvetés jogos, hiszen sima
SQL-t használva is készíthetünk
táblákat és
kapcsolatokat. Valóban, viszont az így készített ún.
tábla leírások (schema) kifejezetten az adott adatbásban működnek.
Képzeljük el például, hogy a fejlesztés kezdetén
SQLite-ot használtunk és késöbb szeretnénk az adatbézisunkat
MySQL alá tenni (mondjuk a
LIVE szerveren). Sajnos ilyen esetben az összes
tábla leírást újra kell készítenünk, mivel a két adatbázis motorban használt
SQL nem kompatibilis. Itt jön a képbe az
Adatbázis Migráció.
A lényeg az, hogy adtabázisleíró nyelvtől függetlenül tudunk
táblákat és
kapcsolatokat készíteni a
PHP segítségével. Az így elkészített
tábla osztályokat pedig nagyon egyszerűen a kívánt (és támogatott!) adatbázis alá be lehet illeszteni. Külön hab a tortán, hogy arra sem kell emlékeznünk, hogy melyik volt az utolsó lefuttatott
tábla osztály, mindezt a
Yii-DbMigartions elvégzi helyettünk. Úgy is gondolhatunk rá, mint egy adatbázisra szabott
Forráskezelő program (pl:
SVN vagy
GIT)
Hátrányok
A modul még csak
alpha állapotban van.
Jelenleg csak
SQLite és
MySQL támogatott.
Installálás és Beállítás
Miután kicsomagoltuk a zip file-t a szokásos helyre - protected/extensions, győződjünk meg arról, hogy az adatbázissal kapcsolatos beállítások megfelelőek a protected/config/main.php-ben.
MySQL:
SQLite:
A Parancssor beállítása
Alap esetben természetesen a
yiic nem tud a
migrate utasításról, hiszen még csak most telepítettük a modult. Ezért be kell állítanunk egy új
commandMap-et a
protected/config/console.php file-ban:
Beállítások tesztelése
Ha minden jól sikerült, egyszerűen futtassuk le a
yiic parancsot a parancssorból:
Reméljük így a
migrate parancs már elérhető.
Migrációk készítése
Nevvekkel kapcsolatos korlátozások
A migrációs file-okat a
protected/migrations vagy a
migrations mappába (a modul könyvtárába) helyezhetjük el. Az file-ok neveit pedig a következő képpen ajánlatos elnevezni:
m20090614213453_MigracioNeve.php
A névnek mindig egy '
m' betűvel kell kezdődnie, utána egy 14 karakter hosszú
dátumot meghatározó string, egy aláhúzásjel '_' és végül pedig egy szabadon választható
MigrációNév.
Persze, szerencsénkre, ezt automatikusan is megtehetjük a
protected/yiic migrate create <MigracioNev> lefuttatásával:
Táblaleírások készítése
Magában a
tábla leíró file-ban létre kell hoznunk egy osztályt, aminek a szülő osztálya a
CDbMigration, és két kötelező metódusunk az
up és
down lesz. Reméljük a következő példa kicsit segíteni fog:
Tehát az
up() segítségével elkészítjük az új táblát, a
down()-nal pedig töröljük.
Támogatott funkciók
A
migráció osztályban a következő funkciók érhetők el:
- execute: sima SQL futtatása, ami nem ad vissza értéket.
- query: sima SQL futtatása, ami értékkel tér vissza.
- createTable: új tábla készítése
- newTable: új tábla leírás készítése
- addTable: táblaleírás hozzáadása a migrációhoz
- renameTable: tábla átnevezése
- removeTable: tábla törlése
- addColumn: oszlop hozzáadása a táblához
- renameColumn: oszlop átnevezése
- changeColumn: oszlop változtatása
- removeColumn: oszlop törlése
- addIndex: index hozzáadása táblához vagy adatbázishoz
- removeIndex: index törlése táblából vagy adatbázisból.
Mezőleíró beállításoknál pedig a következő változók használhatók:
- primary_key
- string
- text
- integer
- float
- decimal
- datetime
- timestamp
- time
- date
- binary
- boolean
- bool
Persze ezen kívül lehet adatbázis specifikus
mezőket is készíteni, viszont úgy nem tudjuk a programot más adatbázis alá (könnyedén) átemelni.
Táblák készítése másként
Migrációk futtatása
Csak azért mert elkészítettük a
tábla-leírásokat, az nem azt jelenti, hogy a táblák már készen is vannak az adatbázisban. A
migrate parancs lefuttatásával történik meg mindez:
Még itt a végén annyit érdemes megjegyezni, hogy ha most lefuttatnánk a
migrate parancsot mégegyszer, semmi nem történne, hiszen a modul megjegyzi, hogy melyik volt az utolsóként lefutott
migráció.
És ennyi! Mindenképpen javaslom az eredeti cikk elolvasását is, mert ott még van egy-két utasítás amire nem tértünk itt ki, de remélem ezek után mindenkinek megjön a kedve egy kis
adatbányászáshoz :)