Laravel a Active Record

xvital
napísal @xvital (460), pred 5 rokmi

Ď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.

ORM – mapovanie objektov do relačnej databázy

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.

Active Record vs. 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.

Eloquent ORM = Active Record

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).

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ť: