Best Practice – Procházení rodičů
- valman
- Člen | 2
Uveďme si modelový příklad.
Mějme tabulky: Users, Texts, Posts, Views.
Users jsou rodičem pro texts. Texts jsou rodičem pro posts. Posts jsou
rodičem pro views.
Vytáhnu si přes group+limit dotaz nad View několik záznamů. Chci si zobrazit jméno Postu, jméno Textu a jméno Usera. Tedy všech rodičů.
Při přímém přístupu to znamená přes cyklus projít výsledek dotazu a
v řetězu se třikrát dotázat na rodiče. Při použití metody
ref
mi tento přístup v půli řetězu selže, protože nevrátí
kompletní záznam, který neobsahuje odkaz na rodiče. V současnosti to mám
implementováno přes prosté find
dotazy s fetch
metodou v návazposti v posloupnosti za sebou.
Otázka zní, jestli existuje nějaká best practice v případě procházení posloupnosti rodičů, když chci data od každého z nich a očekávám velkou pravděpodobnost opakování ve vyšších patrech pyramidy rodičovství.
- valman
- Člen | 2
S Nette bojuji teprve tři dny a patrně šlo o problém s cache, protože
její opětovné smazání pomohlo.
Problém byl v tom, že první ref
vracelo pouze sloupce
id
a name
a už ne text_id
.
Současný kód vypadá následovně:
$chapters = $payments->select('chapter_id, count(*) AS cnt')->group('chapter_id')->order('cnt DESC')->limit(10);
foreach ($chapters as $chapter) {
$info_chapter = $chapter->ref('chapter');
$info_text = $info_chapter->ref('text');
$info_author = $info_text->ref('user');
/* Magic */
}
Měl bych však dotaz, jestli tento kód není náchylný k obdobným náhodným chybám do budoucna.