-
Notifications
You must be signed in to change notification settings - Fork 22
13 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.
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óduModel::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.
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.
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.
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);