Počet článků v kategorii při výpisu foreach

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

Dobrý den,

lámu si tu hlavu s jedním menší problémem, tedy spíše s mou neznalostí. V latte šabloně vypisuji pomocí foreach kategorie článků, ale vedle toho bych chtěl do závorek vypsat počet článků, které jsou zařazeny do této kategorie.

Nevím jaký je správný postup v Nette, zkoušel jsem komponentu, ale to je asi blbost, proto se obracím na Vás.

V tabulce ‚articles‘ mám sloupec ‚category_id‘ kde mám uložené id kategorie.

Předem děkuji za veškeré rady.

elden46
Člen | 37
+
0
-

Nedavno jsem resil neco podobneho, nevim, jestli jsem vyresil optimalne, ale tady je me reseni:

public function beforeRender(){
	$this->template->categories = $categories = $this->model->getCategories();

	$articlesCount = new Array();

	foreach ($categories as $category){
		$articlesCount[$category->id] = $this->model->getArticles()->where('category_id',$category->id)->count();
	}

	$this->template->articlesCount = $articlesCount;
}

V sablone potom:

{foreach $categories as $category}
	Kategorie: {$categories->name}, pocet clanku: {$articlesCount[$category->id]}
{/foreach}

Psano jen z hlavy, tak to ber s rezervou…

Editoval elden46 (29. 3. 2012 17:29)

Gustav
Člen | 16
+
0
-

Super, funguje.

Děkuju

Caine
Člen | 216
+
0
-

Já bych to udělal takto:

$this->template->articlesCount = $this->model->getArticles()
	->select('category_id, COUNT(*) as article_count')
	->group('category_id')
->fetchPairs('category_id', 'article_count');
Jan Mikeš
Člen | 771
+
0
-

elden46 napsal(a):

Nedavno jsem resil neco podobneho, nevim, jestli jsem vyresil optimalne, ale tady je me reseni:

public function beforeRender(){
	$this->template->categories = $categories = $this->model->getCategories();

	$articlesCount = new Array();

	foreach ($categories as $category){
		$articlesCount[$category->id] = $this->model->getArticles()->where('category_id',$category->id)->count();
	}

	$this->template->articlesCount = $articlesCount;
}

V sablone potom:

{foreach $categories as $category}
	Kategorie: {$categories->name}, pocet clanku: {$articlesCount[$category->id]}
{/foreach}

Psano jen z hlavy, tak to ber s rezervou…

Takto bych to neresil, predstav si, ze mas v databazi 100 kategorii, cyklus se 100× provede a mas nakrku 100 dotazu do databaze na pocet clanku. Naraz bys mel dejme tomu 1000 uzivatelu na strance, kteri by se divali prave na stranku s kategoriema a hle, ve stejny okamzik mas 100 000 dotazu do databaze, to uz je celkem huste cislo ne? :)

To co pise Caine se zda byt lepsi a vporadku.