Skip to content

13 Načítanie dát do modelu

Patrik Hrkút edited this page Dec 7, 2023 · 6 revisions

Načítanie dát do modelu

Jednou z hlavných úloh frameworku je odbremeniť vývojárov od rutinnej práce. Pripojenie k databáze, vykonanie SQL príkazu, mapovanie dát do dátových tried, prípadne uloženie alebo mazanie dát do/z databázy a odpojenie od databázy to sú činnosti, ktoré sa neustále opakujú a vyžadujú množstvo kódu, ktorý sa opakuje. Dobrý framework zvyčajne riešenie týchto opakujúcich programátorských úloh zakrýva svojími metódami.

Načítanie všetkých dát z DB tabuľky

Ak chcete v našom frameworku napr. prečítať dáta z DB, vložiť ich do dátových objektov, stačí vykonať jediný príkaz. Predpokladajme, že máte vytvorený model Post a v DB existuje tabuľka posts so stĺpcami id (primárny kľúč) a text.

Post::getAll();

Pozor! Dáta načítané z databázy framework vloží do atribútov inštancií príslušných modelov priamo. Nevolajú ich set metódy! Toto platí pre metódu Model::getAll(), aj pre metódu Model::getOne().

Ako ste si mohli všimnúť, nie je nutné explicitne sa pripájať k DB serveru, ani zostavovať SQL príkaz. O to všetko sa postará framework, navyše výsledok sa priamo vloží do poľa inštancií tried typu Post, ktoré vytvorí. Ak v DB tabuľke nie sú žiadne dáta, volanie metódy vráti prázdne pole.

Vývojár sa potom môže sústrediť na vytváranie aplikačnej logiky, ktorá sa má s načítanými dátami vykonať, napr. v tomto najjednoduchšom prípade dáta poslať do pohľadu.

Načítanie dát z DB tabuľky na základe podmienky

Nie vždy chcete z DB načítať všetky záznamy, ale chcete ich obmedziť na základe nejakých kritérií. Tieto kritériá sa v SQL jazyku zapisujú prostredníctvom klauzuly WHERE. V našom frameworku podmienku uvediete ako dva parametre metódy getAll(). Prvý parameter je text podmienky WHERE spolu s parametrami podmienky zastúpenými znakom ? a ďalší parameter je pole parametrov podmienky, podobne ako pri metóde PDO:prepare() z PDO rozšírenia. Jedna podmienka môže obsahovať viacero častí, napr. pospájaných logickými operátormi a takisto môže obsahovať viacero parametrov. Viac informácií nájdete v PHP dokumentácii metódy PDO::prepare().

$posts = Post::getAll('`text` LIKE ?', ['A%']);

Toto volanie vráti pole inštancií modelu zodpovedajúcej danej podmienke. Ak žiadne dáta v DB nevyhovujú podmienke, volanie vráti prázdne pole.

Poznámka: Je dobrou praxou názvy tabuliek a stĺpcov uzatvárať do spätných apostrofov `, vyhnete sa tým kolízii s vyhradenými kľúčovými slovami v SQL jazyku.

Zoradenie dát

Dáta je možné z DB vrátiť usporiadané tak, ako potrebujete. Je zbytočné dáta triediť pomocou jazyka PHP, pretože databázy majú oveľa efektívnejšie metódy (indexy) na zoraďovanie dát, dokonca aj podľa viacerých kritérií súčasne. Špecifikácia zoraďovania sa stanoví nasledovne:

$posts = Post::getAll(orderBy: '`text` desc');

Volanie tejto metódy vráti pole modelov usporiadané podľa textu zostupne. Smer zoradenia je súčasťou parametra (asc alebo desc).

Poznámka: V rámci jedného volania metódy getAll() môžete súčasne uviesť aj podmienku, aj spôsob zoradenia dát.

Poznámka: Hodnota parametru orderBy sa vkladá priamo do sql dotazu, je potrebné zabezpečiť správne escapovanie hodnôt.

Načítanie jedného záznamu

Ak potrebujete načítať práve jeden záznam na základe hodnoty unikátneho primárneho kľúča, použite nasledujúcu metódu, ktorá vráti práve jednu inštanciu modelu. Ak záznam s uvedeným primárnym kľúčom neexistuje, volanie vráti hodnotu null.

$post = Post::getOne($id);