Nette\Database aneb traverzování kategorií

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

Zdravím komunitu,
jsem začátečník s Nette a mám problém s Nette Database.
Potřeboval bych rekurzivně traverzovat okolo stromu, což se mi „úspěšně“ daří, nýbrž chyba je zde

Struktura tabulek + dummy data – Odkaz
Potřeboval bych poladit spíše dotaz.

{block #category}
		{if count($categories) > 0}
			<ul>
					{foreach $categories as $category}
					<li>

						{ifCurrent Category: $category->id}
							<strong>{$category->title}</strong>
						{else}
							<a n:href="Category: $category->id">{$category->title}</a>
						{/ifCurrent}
							 {include #category, 'categories' => $category->children}
					</li>
					{/foreach}
			</ul>
		{/if}
	{/block}

Proměnná

$category->children

by měla obsahovat všechny children kategorie nadřazené parent, nejsem schopen dotazem dostat tyto informace

mohl by mne někdo prosím „Nakopnout“ jak dále?

Díky

Jimmy

vvoody
Člen | 910
+
0
-

Odporučil by som ti switchnúť children za parent. Logicky ak som na riadku Notebooky, tak odkaz na riadok 2, čiže Počítače, je rodič.

V šablóne:

{include #category, 'categories' => $category->related('parent','categories')}

alebo ak neposlúchneš moju radu :) tak:

{include #category, 'categories' => $category->related('children','categories')}

(Predpokladám že id je nastavené ako primary key)

Jakub Kontra
Člen | 30
+
0
-

Díky!

jinak teď mi to iteruje víckrát než potřebuji – Odkaz

vvoody
Člen | 910
+
0
-

Iteruje vicekrat? Myslíš tým že sa rendruje aj tretia úroveň? No ale tak rekurzia funguje :) ale to už si asi budeš vedieť obmedziť.

hAssassin
Člen | 293
+
0
-

tak iteruje, ale nejdriv musis omezit ten puvodni vyber cili ty prvni categories by meli mit WHERE parent IS NULL, coz si myslim ze nemas, takhle ti to vybere prvnim dotazem vsechny kategorie a ty je vypisujes a pro kazdou vypisujes i podkategorie… Nemam pravdu?

Jakub Kontra
Člen | 30
+
0
-

Dotaz vypadá takto

	$this->categoryRepository->findBy(array('parent' => NULL));




public function findBy(array $by)
{
	return $this->getTable()->where($by);
}
Jakub Kontra
Člen | 30
+
0
-

Fixed!

$this->template->categories = $this->categoryRepository->findBy(array('parent' => NULL,'children' => NULL));

Díky moc za pomoc!