Nette database příliš mnoho queries
- t0x1c
- Člen | 151
Zdravím programuju svůj první web v nette. Chci se zeptat mám stránku kde vypisuji objednávky ktere uživatel provedl a při rozkliknuti objednávky vidí jake produkty si objednal. Na začátku mam foreach pro vypsani objednávek a v tom foreach mam další foreach na vypsání produktu. No problem je v tom že mám cca 10 objednávek v každem více než dva produkty tim pádem na stránce je prováděno cca 58 queries což je podle kamoše co programuje v PHP strašně moc. Chci se zeptat jestli by bylo nějak možne pomoci nette database toto zmenčit popřipadě jak? Zde přidávám kod.
{foreach $neco as $neco}
....
.....
{foreach $sluzby->VypsatObjednavkySluzby($objednavka->id) as $sluzba}
<tr>
<td><img src="{$basePath}/img/sluzby/ikonky/{$sluzba->sluzby->obrazek}.png" class="img-rounded" width="20" height="20"></td>
<td style="text-align: left">{$sluzba->sluzby->nazev}</td>
<td style="text-align: center">{$sluzba->sloty} slotů</td>
<td style="text-align: center;width: 80px">{$sluzba->obdobi} měsíc</td>
<td style="text-align: center">{$sluzba->cena} Kč</td>
<td style="text-align: center">{$sluzba->sleva} %</td>
</tr>
{/foreach}
......
......
{/foreach}
Model
public function VypsatObjednavkySluzby($id){
return $this->findAll()->where(array('id_objednavky' => $id));
}
Vím že určitě budu k smichu :D Ale začínám takže bych ocenil rady a ne výsměchy diky :)
- David Matějka
- Moderator | 6445
tohle ani nette\database nezoptimalizuje :) musis pouzit $sluzby->related(…) viz https://doc.nette.org/cs/database
- t0x1c
- Člen | 151
Nechápu přesně co to related dělá. Já potřebuju vytahnout z tabulky služby dané objednávky podle id.
matej21 napsal(a):
tohle ani nette\database nezoptimalizuje :) musis pouzit $sluzby->related(…) viz https://doc.nette.org/cs/database
- David Matějka
- Moderator | 6445
jo oprava, u tebe to asi bude
foreach($objednavky as $objednavka) {
...
foreach($objednavka->related('sluzba') /* nebo sluzby, nevim, jak se ta tabulka jmenuje*/ as $sluzba) {
...
}
}
to vybere vsechny sluzby pro danou objednavku – vezme to tabulku
‚sluzba‘ respektive ‚sluzby‘ (nevim jak to tam mas) a koukne kterej cizi
klic ukazuje na ‚objednavka‘ a podle toho to vybere, s tim rozdilem, ze zna
vsechny objednavky takze to polozi dotaz ve stylu
SELECT * FROM sluzba WHERE id_objednavka IN(1,2,3,4,4)
.. koukni se
v tej dokumentaci na ten obrazek na tabulku book_tag a jak je to tam
pouzito
Editoval matej21 (17. 3. 2013 14:56)
- David Matějka
- Moderator | 6445
jestli to teda chapu, mas tabulky objednavky, sluzby a sluzby_objednavky,
jo?
tak je to v podstate uplne stejnej pripad jako v dokumentaci s tagama:
foreach($objednavky as $objednavka) {
foreach($objednavka->related('sluzby_objednavky') as $sluzbyObjdnavky) {
{var $sluzba = $sluzbyObjednavky->sluzby}
...
}
}
- t0x1c
- Člen | 151
Nene mam tabulky objednavky kde je cena celkem atd.. a sluzby_objednavky kde jsou objednane sluzby ke kazde objednavce. No a ja teda potrebuju vypsat ke kazde objednavce z tabulky objednavky vsechny sluzby ktere si objednali v tabulce sluzby_objednavky kde jsou sluzby ktere byly objednane prirazene tak ze maji sloupeček a tam id te objednavky ke ktere patří.