ActiveRow::ref( … ) pro záznam ze stejné tabulky
- uestla
- Backer | 799
Příjemný podvečer.
V databázi mám mj. tabulku units
, která ukazuje cizím
klíčem sama do sebe (na nadřazenou jednotku, jedná se o sloupec
parent
).
Když pak iteruji výběrem určitých jednotek, rád bych se dostal na
záznam právě oné nadřazené (čili „o level výš“). Pomocí
$row->ref(...)
se mi to bohužel nedaří :-(
Mohl by mi někdo, prosím, poradit?
{foreach $units as $unit}
{dump $unit->ref('unit', 'parent')} {* vyhazuje PDOException:"No reference found for $units->unit" *}
{/foreach}
Předem moc děkuji.
- uestla
- Backer | 799
Asi si stále nejsem úplně jist.
$row->ref(...)
tedy bere klíč záznamu $row
a
hledá jej v cizí tabulce… ? Pokud ano, je to něco jiného, než bych
potřeboval (najít v jiné tabulce klíč na základě neprimárního klíče
záznamu $row
).
Čili abych to řekl úplně jasně, tak
$row->id ... primární klíč
$row->parent ... cizí klíč sahající do stejné tabulky
A rád bych za pomoci $row
získal řádek s primárním
klíčem $row->parent
.
- bojovyletoun
- Člen | 667
už jsem si na to zvykl, popravdě je to lepší než v notORM. I když
tady respektuji, že každému vyhovuje úplně něco jiného.
Pomůcka:
- ref = reference(something)= odkaž na něco, ref má 3 písmenka, je kratší, tedy jednoduchá přímá vazba na konkrétní záznam. v reflection taky používá metodu getBelongsToreference. Taky se často používá zkratka $row->something
- related = Imho tady je jediná pomůcka, že má víc písmen, vrací více záznamů, celou kolekci. Používá getHasManyReference, zápis $row->something nepoužívám (co jsem zkoumal Row::_get(), ani není možný
- David Grudl
- Nette Core | 8228
Nejjednodušší, jak si zapamatovat rozdíl mezi ref a related, je ref vůbec nepoužívat a místo něj „proměnnou“.