Nette\Database fetch na joinutych tabulkach pre nastavenie defaultnych hodnot formulara
- ony2
- Člen | 9
Ahojte, pouzivam najnovsie Nette a po dlhej dobe som sa odhodlal prejst z Dibi na Nette\Database a hned som narazil na problem ktory som v dibi rutinne riesil cez fetch ale v v Database sa mi to nedari.
Potrebujem urobit query ktory mi z dvoch prepojenych tabuliek jeden objekt alebo pole ktore by som mohol pouzit pre nacitanie hodnot do formulara bez toho aby som to musel foreachovat. Uz som skusal rozne sialene kombinacie ako vyskladat query, ale vzdy ked som spojil tabulky a poslal som to na funkciu <?php iterator_to_array(); ?> vratilo mi len stlpca z druhej tabulky.
Mate nejaky best practice ktory sa da pri Nette\Database pouzit na nastavenie hodnot formualara?
Editoval ony2 (19. 1. 2012 20:05)
- ony2
- Člen | 9
Ja som nemyslel ako naplnit select z jednej tabulky, to je jednoduche, ale
ako vybrat jeden riadok z viacerych tabuliek cez inner alebo left join a pouzit
ich ako data pre cely formular.
V dibi to je jednoduche:
<?php
if (!$form->isSubmitted()) {
$res = dibi::query('SELECT * FROM page INNER JOIN page_type ON page_type.id = page.page_type_id');
$row = $res->fetch();
if (!$row) {
throw new \Nette\Application\BadRequestException('Record not found');
}
$form->setDefaults($row);
}
?>
Ale v Nette\Database to neviem.
- 22
- Člen | 1478
teda database nepoužívám, ale asi chceš:
Pokud
použijeme tečkovou notaci (‚$table.$column‘), automaticky se vytvoří
spojení s odkazovanou tabulkou. a API
Nebo chceš něco jiného, než join 2 tabulek a vypsání výsledku?
Editoval 22 (22. 1. 2012 0:46)
- rixi
- Člen | 109
ony2 wrote:
Aha, takze nedokazem to vytiahnut na jedenkrat do jedneho pola, kde by som mal data z oboch tabuliek?
Lebo ten moj priklad s dibi mi vrati jeden pekny dibiRow kde mam vsetky stlpce ktore potrebujem.
Ak taketo nieco nette database nedokaze tak to je dost smutne
Samozrejme ze to ide aj s Nette\Database, ako pise 22. Pomocou tejto syntaxe by sa malo dat vyselectovat vsetko co potrebujes a z x tabuliek, ak sa uspesne vykona automaticky JOIN.
// select vsetkych stlpcov z dvoch tabuliek
$this->database->table('page')
->select('page.*, page_type.*')
->where('page.id', $id);
Editoval rixi (22. 1. 2012 9:57)