Vytažení záznamů ze dvou tabulek (1:N vztah)
- juneau
- Člen | 166
Zdravím, už opravdu dlouho laboruji s tím, jak v Nette\Database udělat
následující: mám tabulku firmy (id, nazev, ...)
a
firmy_poznamky (id, firmy_id, text,...)
. A chci získat všechny
záznamy firem a k těm, co mají nějaké textové poznámky, tak do pole
i ty poznámky. Čekal jsem, že to bude jasné jak facka a obdobné jako
příklad z dokumentace, ale Laděnka mi neustále hlásila neexistující
sloupce a pod …
Nakonec mám funkční toto, ale nepřijde mi to jako nejčistší řešení (už pro to, že to pokládá tolik dotazů, kolik je záznamů ve firmách, což je docela blbě).
<?php
foreach($database->table('firmy')->order('nazev')->limit( $paginator->itemsPerPage, $paginator->offset ) as $firma) {
foreach ($database->table('firmy_poznamky')->where('firmy_id',$firma->id) as $poznamka) {
//... $firma['poznamky'][] = $poznamka;
}
$data[] = $firma;
}
?>
Mohl by mi to prosím někdo, kdo s Nette dělá déle než jeden den ( = aka já) přepsat do optimální podoby?
- juneau
- Člen | 166
No k tomu se právě vztahuje ta věta „Čekal jsem, že to bude jasné jak facka a obdobné jako příklad z dokumentace, ale Laděnka mi neustále hlásila neexistující sloupce a pod“ … opravdu prosím, mohl byste mi ten kousek kódu napsat, jak má opravdu vypadat? Já to prostě dohromady pro tyto dvě tabulky nedal.
- juneau
- Člen | 166
Aha, tak to už jsem asi opravdu idiot. Přísahal bych (na levé varle!!!), že během posledních 2 hodin jsem měl tento kód napsaný asi 10×, a nikdy nefungoval … a nyní najednou ano. Že by keš?
<?php
//... ten druhy foreach
foreach ($firma->related('firmy_poznamky') as $poznamka) {
//...
}
?>