Primitivní INNER JOIN dvou tabulek 1:n
- DLine
- Člen | 7
Zdravím, v první řadě se omlouvám, že zakládám další diskusi na toto téma, ale ani po projítí ostatních podobných vláken jsem svůj problém nevyřešil…
Jde jen o to, jak v nette udělat klasické spojení 2 tabulek.
Konkrétní příklad:
- mám tabulku event (sloupce: id, name, icon_id) a tabulku icon (sloupce: id, name)
- v šabloně chci vypsat název události (event.name) a název její ikony (icon.name), taže z toho bude ve výsledku třeba „Franta narozeniny | dárek“, „Závod rally | auto“, …
V phpMyAdminovi to jde udělat jednoduše SQL dozatem
SELECT event.name, icon.name AS icon_name FROM 'event' INNER JOIN icon ON event.icon_id = icon.id
Ale ani za boha nemůžu přijít na to, jak to napsat v nette.
$this->getTable()->select('event.*, icon.name AS icon_name');
mi vyhazuje \InvalidArgumentException – No reference found for
$event->icon. :/
Pokud si někdo najde čas a napíše mi prosím ten jeden řádek kódu jak to má být správně, budu mu vděčný. Už se tady s tím rýpu půl dne, děkuju :)
- Pavel Janda
- Člen | 977
No, jde o spíš to, jestli toužíš používat NDBT, nebo šáhneš po dibi. NDBT není koncipována pro přímé joinování a pod.
Nebo jestli (jako skoro každý) přejdeš (dřív nebo později) na nějaké ORM. :)
Doporučuji zatím to dibi a potom po očku koukat na nějaké óeremku.
Edit:
Ještě přiblížím: NDBT = Databázová vrstva, která je nativně
zakomponovaná v Nette. Je to zkratka pro Nette\Database\Table.
Dibi je další knihovna pro práci s databází, kterou však musíš připsat
do composeru a skrze extension „zapnout“.
Editoval Pavel Janda (23. 7. 2015 16:36)