web.php5.sk

Nette a Phinx - migrácie databázy

12. október 2016 / Čamo

Inštalácia databázových migrácii Phinx do Nette je celkom jednoduchá. Poďme na to.

V konzole sa presunieme do koreňového adresára Nette projektu a cez Composer si nainštalujeme Phinx.

composer require robmorgan/phinx

V koreňovej zložke projektu vytvoríme adresár napr. migrations do ktorého sa budú migrácie ukladať. Teraz treba ešte migrácie inicializovať. V dokumentácii je uvedený príkaz

vendor/bin/phinx init

Na Windowsoch to treba prepísať na

vendor\bin\phinx init

Pri úspechu Phinx vypíše číslo verzie a informáciu o vytvorení konfiguračného súboru - created .\phinx.yml

Súbor phinx.yml by sa mal nachádzať v koreňovej zložke webu.

Teraz si súbor phinx.yml otvoríme v editore a nastavíme potrebné údaje. Cesty - paths k adresáru do ktorého sa majú migrácie a prípadne seeds ukladať. Prístupové údaje do databázy a default_database tj. prostredie ku ktorému budeme momentálne pristupovať. Lokalhost aj produkčný server budú mať svoj vlastný phinx.yml súbor. Takže na lokale nastavíme  development a na produkcii production. Súbor phinx.yml nepridávame do Gitu. Platí o ňom to isté čo o config.local.neon súbore. Obsahuje prístupové údaje takže treba byť opatrný. 

A môžeme vytvoriť prvú migráciu. Dá sa to urobiť ručne vytvorením súboru s požadovaným názvom a požadovanou triedov a metódami. Ale jedoduchšie je nechať si súbor vygenerovať. Spustením príkazu 

vendor\bin\phinx create MyNewMigration

Príkaz vytvorí súbor s názvom YYYYMMDDHHMMSS_my_new_migration.php kde prvé znaky sú current timestamp. Súbor obsahuje kostru ktorá vyzerá cca. takto

<?php

use Phinx\Migration\AbstractMigration;

class MyNewMigration extends AbstractMigration
{
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
*
* The following commands can be used in this method and Phinx will
* automatically reverse them when rolling back:
*
* createTable
* renameTable
* addColumn
* renameColumn
* addIndex
* addForeignKey
*
* Remember to call "create()" or "update()" and NOT "save()" when working
* with the Table class.
*/
public function change()
{

}
}

O tom ako funguje metóda change() sa dočítate v dokumentácii. Spomeniem len, že metóda change() má určité obmedzenia myslím, že čo sa týka updatov. Takže okrem nej existujú ešte ďalšie dve metódy. Prvá je metóda up() a druhá metóda down(). Ako to celé funguje sa netýka inštalácie a nieje to nič nepochopiteľné takže to vynechám. Migrácie sa spúšťajú príkazom 

vendor\bin\phinx migrate -e development

Príznak -e development určuje, ktoré prístupové údaje z phinx.yml súboru Phinx použije pre prístup do databázy. Ak -e neuvedieme použje sa voľba defaul_database z yml súboru. 

Nakoniec spomeniem ešte jednu vec, ktorá vás možno bude zaujímať. A to sú template súbory. Template súbor obsahuje kostru podľa ktorej sa budú generovať migračné súbory. Ja používam napr. takúto šablonu

<?php

use Phinx\Migration\AbstractMigration;
use Phinx\Db\Adapter\MysqlAdapter;

class $className extends AbstractMigration
{
/**
* Migrate Up.
*/
public function up()
{

}


/**
* Migrate Down.
*/
public function down()
{

}

}

Miesto metódy change v nej mám metódu up() a down(). Okrem toho nastavuje namespace pre MysqlAdapter ktorý zabezpečuje podporu určitých dátových typov. In addition, the MySQL adapter supports enum, set, blob and json column types. (json in MySQL 5.7 and above). 

Takže ak vynecháme príznak -e a chceme na vygenerovanie migrácie použiť šablonu spustíme príkaz 

vendor\bin\phinx create MyNewMigration -t migrations/template

Príznak -t obsahuje relatívnu cestu k súboru template, ktorý som si vytvoril v adresáry migrations. 

That's all. Have a nice day.

 

Ak chcete pridávať komentáre musíte sa prihlásiť