potřeba naplnit parametry funkce datama z templates

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
qteck
Člen | 164
+
0
-

Ahoj,

skutečně nevím jak to vhodně nazvat :d.

O co jde.

Snažím se vypsat založené galerie na profilu uživatele. Galerie vypíšu, ale chci k ním vypsat i počet fotek v galerii.

vytvořil jsem si tedy dvě metody v modelu:

function getGalleries($id)
{
    return $this->conn->table('galleries')->where('id_author', $id);
}

function getTotalOfPicsInGallery($id, $id_gallery)
{
    return $this->conn->table('gallery_pictures')->where('id_autor',$id)
                                                 ->where('id_gallery', $id_gallery)->count('*');
}

jak je vidno ptřebuji naplnit dva parametry. první by nebyl problém, je to id uživatele a dostávám ho z url. Problém je ten druhý parametr, který dostávám z metody GetGalleries() k němuž se dostávám až v template:

<h2 class="fotografieH2">Vytvořené galerie</h2>
{foreach $galleries as $gallery}
<div class="gallery_section">

    <h3><a href="{link UkazGalerii:}">{$gallery->name}</a></h3>
    <a class='group1' href="{$basePath}/js/colorbox/content/daisy.jpg" style="" title="AHOJ"><img src="{$basePath}/js/colorbox/content/daisy.jpg" alt="fotos"></a>

    <div class="content">{..-->.....<--.....} obrázků</div>
    <div class="created">1.2.2014</div>

</div>
{/foreach}

id galerie dostanu tedy v proměnné $gallery->id jak tu funkci tedy dostat sem? abych mohl udělat třeba $galleries->getTotalOfPics($id,$gallery->id)

Nebo jak to řešit efektivněji?

Děkuji.

Díky.

Mysteria
Člen | 797
+
0
-

Osobně v těhle situacích používám:

count($gallery->related('gallery_pictures'))

Jestli to je lepší / horší než tebou navrhované řešení, to ti řekne někdo zkušenější. :)

qteck
Člen | 164
+
0
-

CO s týče zhodnocení těchto řešení, taky by mě zajímalo jak to s nimi je?

Jednodušší určitě related.

Oli
Člen | 1215
+
0
-

qteck: Tvoje řešení by udělalo podle mě X dotazů na db, přičemž X je počet galerií. Řešení Mystera by mělo udělat jen jeden dotaz navíc. Proto je jeho řešení lepší… Doufám, že si to pamatuju dobře a neříkám bludy :-)

qteck
Člen | 164
+
0
-

tk podle mě i te related udělá, přeci, každá ta galerie má jiný počet obrázků a nějáký způsobem jí musí dostat podle podmínek. leda že by to u tabulku stáhlo rovnou celou..

Oli
Člen | 1215
+
0
-

Přesně tak. Když jsem se s tím setkal poprvé, tak jsem na to celkem koukal, že ten related udělal jen jeden dotaz. Ono to myslím stáhne všechno a pak interně namapuje, nebo tak nějak :-) Přesně jsem zo nezkoumal, ale tohle jsem si z toho odnesl.

greeny
Člen | 405
+
0
-

Ten related „magicky“ zjistí, že ho voláš v cyklu, takže si nejdřív vytáhne všechny IDčka těch galerií a pak zavolá SELECT * FROM ... WHERE id IN (1,2,3,5,8,12,...). Vnitřně pak každý řádek dotazu vrátí k danému volání related.

Jinak určitě je lepší řešení s related, tam máš konstantní počet dotazů.