Ďalším dielom základov v Laraveli by logicky mala byť databáza alebo ORM Eloquent. Predtým, než sa pozrieme na to, ako Laravel pracuje s databázou si však povedzme niečo o tom, ako Laravel pracuje s dátami na úrovni modelov a ako zabezpečuje perzistenciu modelov v databáze.
Existencia modelov je ohraničená PHP runtimeom, sú teda, len dočasné. Na to, aby sme dáta modelov zachovali, potrebujeme modely uložiť tzv. perzistentne. Ako úložisko sa vo webových aplikáciach najčastejšie využívajú relačné databázy. Prístupov k mapovaniu objektov do databázy je však viacero. Dva, v rámci webových frameworkov najčastejšie používané, sú Active Record a Data Mapper.
Zatiaľ čo v rámci Data Mapper prístupu definujete prepojenie dát s databázou explicitne, Active Record implicitne mapuje stĺpce tabuľky 1:1 na atribúty modelu.
V AR typicky využívame pri práci s modelmi workflow:
$thread = new Thread;
$thread->subject = 'Example Thread';
$thread->save();
V prípade Data Mapper by základ vyzeral podobne:
$thread = new Thread;
$thread->subject = 'Example Thread';
ThreadMapper::persist($thread);
Model Thread
však nemá informácie o štruktúre databázy a je len obyčajným PHP objektom, preto na uloženie potrebujeme zavolať službu, ktorá model do databázy uloží.
Výhodou je, že je len objektom a sám sa nezaoberá svojou perzistenciou. To za neho rieši príslušný, oddelený mapper v inej vrstve, ktorý má na starosti mapovanie atribútov modelu do tabuľky.
Active Record túto vrstvu neobsahuje, vďaka čomu môže byť vývoj omnoho jednoduchší a rýchlejší. Na druhej strane to predurčuje využitie vzoru na určitý typ aplikácií; Je excelentný pre domény, ktoré neobsahujú zložitú biznis logiku a predovšetkým tie, kde je práca s dátami skutočne priamočiara – CRUD.
Čím viac logiky pri vyberaní/zapisovaní dát do databázy potrebujete, tým menej výhodný tento model bude – spoznáte to napríklad podľa neštandardne dlhých tried modelov.
Laravel vo svojom ORM Eloquent implementuje vzor Active Record. Dobrou správou pre tých, ktorí nad Laravelom uvažujú je, že veľa webov si s CRUD operáciami do veľkej miery vystačí, pretože fungujú ako rozhranie na vytváranie/zobrazovanie obsahu.
Pre tie ostatné je na mieste zamyslieť sa pred návrhom nad tým, či ísť cestou priamych queries v Laraveli a obchádzať tak ORM Eloquent, alebo sa viac oplatí siahnuť po inom ORM (alebo aj celom frameworku) implementujúcom vzor Data Mapper a definovať mapovanie podľa potrieb aplikácie v oddelenej vrstve (DM).
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ť