Databáza a migrácie

xvital
napísal @xvital (460), pred 5 rokmi, posledná úprava 29.1.2019 12:51

Keď už vieme ako Laravel zabezpečuje perzistenciu modelov v databáze, môžeme prejsť na samotnú databázu a jej konfiguráciu. V tomto článku sa pozrieme na konfiguráciu a používanie databáz v Laraveli.

Konfigurácia

Konfigurácia a nastavenia v Laraveli vo všeobecnosti majú dve úrovne. Adresár config obsahuje jednotlivé konfiguračné súbory pre rôzne časti aplikácie a služby, resp. balíčky. Potom je tu .env súbor, kam môžete vytiahnuť niektoré premenné, ktoré majú byť závislé na prostredí. .env súbor by sa pri deploymente nemal distribuovať. Vďaka tomu bude konfigurácia zodpovedať danému prostrediu, bez potreby meniť hodnoty pri opakovanom deploymente (úpravy/oprava chýb).

Najčastejšie zrejme budete využívať databázu MySQL (MariaDB). Konfigurácia je v rámci novej inštalácie Laravelu pripravená na použitie MySQL, takže stači v súbore .env nastaviť správne údaje pre pripojenie k databáze.

Ak chcete zmeniť prednastavený typ spojenia, stačí otvoriť súbor config/database.php a upraviť hodnotu default podľa potreby. Pripojenia spravujete v tom istom súbore, o niečo nižšie, pod kľúčom connections.

Ak ste zadali správne údaje, môžete vyskúšať spustiť migráciu (pomocou php artisan migrate) a uvidíte, či zbehnú vstavané migrácie v poriadku.

Migrácie

Veľmi efektívne a využiteľné rozhranie pre prácu so štruktúrou databázy vám dávajú v Laraveli migrácie. Ide o zaujímavý koncept, ktorý pripomína verzovanie v svn alebo git.

Ako to funguje?

V databáze je pre účely migrácií vytvorená veľmi jednoduchá servisná tabuľka migrations, ktorá obsahuje záznamy o tom, ktoré migrácie už boli vykonané. Každý zásah do štruktúry tabuliek sa potom robí v rámci novej migrácie. Databáza prejde vykonaním migrácie do nového stavu. Vďaka tomu môžete robiť zásahy aj do produkčnej databázy bez toho, aby ste museli dáta exportovať, (v extrémnom prípade upravovať) a znova importovať do upravenej databázy. Stačí správne napísať migráciu.

Nikde však nie je striktne uvedené, ako pristupovať k migráciam. Môžete vytvárať migrácie pri vytváraní modelov s prepínačom -m a mať tak oddelené migrácie pre jednotlivé tabuľky modelov. Osobne využívam skôr prístup, kedy sa v rámci jedného cyklu od návrhu až po deployment snažím udržiavať všetky úpravy na úrovni databázy v jedinej migrácii. Získam tak výhodu nižšieho počtu migračných súborov, lepší prehľad a lepšiu kontrolu nad migráciami – pri každom deploymente sa vykoná maximálne jedna. Záleží však aj od konkrétnej situácie, a niekedy dáva väčší zmysel oddeliť jednotlivé úpravy/vytváranie podľa logických celkov a nemiešať všetko dohromady. Vyberte si akýkoľvek prístup, ktorý vyhovuje vám, konkrétnemu projektu a vášmu workflow.

Vytváranie migrácii

Novú migráciu vytvoríte príkazom

php artisan make:migration nazov_migracie

Pre urýchlenie a zjednodušenie práce s vygenerovanými súbormi migrácii môžete využiť prepínače --create a --table, ktoré hovoria o tom, ktorej tabuľky sa bude migrácia týkať. Pripravený súbor tak bude obsahovať viac informácií - menej práce s úpravou.

Štruktúra súborov

Trieda migrácie obsahuje dve metódy: up a down. V metóde up hovoríme, čo sa má vykonať pri vykonávaní migrácie (napr. vytváranie tabuliek, pridávanie nových stĺpcov, zmena názvov stĺpcov a pod.) a v metóde down by sme mali tieto akcie zas vziať späť. V ideálnom prípade sa databáza po vykonaní migrácie a jej rollbacku dostane znova do pôvodného stavu. V reálnom svete väčšina vývojárov metódu down vôbec nevyužíva, resp. v nej len v prípade vytvárania tabuliek v rámci migrácie prevádzajú ich drop. Taylor Otwell sa k tejto problematike vyjadril v Laravel Snippet #3.

Všetky potrebné funkcie pre vytváranie tabuliek, stĺpcov, úpravy, vytváranie FK, indexov a množstvo ďalších vecí nájdete priamo v dokumentácii. Ak by ste s potrebovali pomôcť s konkrétnou vecou, stačí sa ozvať tu na fóre.

Prístup k dátam

Priamočiary prístup k dátam na vyššej úrovni zabezpečuje ORM Eloquent, ktorý mapuje stĺpce tabuliek modelov na atribúty modelov v PHP. Viac o Eloquente a Active Record implementácii som napísal v staršom blogu. Tejto téme sa ešte budem venovať v článku o Eloquente.

Druhý prístup (nižšej úrovne) ponúka Query Builder a fasáda DB. Ak potrebujete vo vašej aplikácii pristupovať k dátam zložitejšími dotazmi, Query Builder je rozhranie, ktoré hľadáte. Na stránkach dokumentácie pre Query Builder nájdete (takmer) nekonečné množstvo užitočných funkcií, ktoré zabezpečujú konvenčný prístup k databáze. Ak by vám ani toto nestačilo, je vám k dispozícii metóda raw na čisté SQL dotazovanie. Dohromady je k dispozícii veľmi silný nástroj, ktorý zaručene pokryje všetky vaše potreby.

Ešte nie si členom CZ/SK Laravel komunity?

To možeš ľahko zmeniť. Registrácia je zdarma a ako registrovaný člen získaš množstvo výhod. Prečítaj si prečo by si mal byť členom.

Prihlásiť sa Zaregistrovať

Mohlo by Ťa zaujímať:

tajnyusername

Laravel UI

@tajnyusername (10), pred 11 mesiacmi