Zobrazení kategorie příspěvku přes spojovací tabulku

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

Zdravím

Začínám s nette, pomalu se jim prokousávám a zkouším udělat stránku s příspěvky a každý příspěvek může být v několika kategoriích, viz
Mám 3 tabulky, viz obrázek

post – tabulka s příspěvky
post_cat – propojovací tabulka
cat – tabulka s kategoriemi

Podařilo se mi vypsat jak obsah příspěvku tak i id kategorií, ale potřebuji pomoct k zobrazení jména kategorie

v PostPresener:

public function renderShow($postId)
    {
        $this->template->post = $this->database->table('post')->get($postId);
        $this->template->postCats = $this->template->post->related('post_cat');
    }

show.latte

{block content}

<p><a n:href="Post:default">← zpět na výpis příspěvků</a></p>

<div class="date">{$post->created|date:'F j, Y'}</div>

<h1 n:block="title">{$post->title}</h1>
	<ul>
		<li>Kategorie</li>
		<ul n:foreach="$postCats as $postCat">
			<li>{$postCat->cat_id}</li>
		</ul>
	</ul>

<div class="post">{$post->content}</div>

Zkoušel jsem {$postCat->cat_id} upravit na {$postCat->cat_id->name}, ale nešlo to. Potřebuji poradit jak zobrazit jméno dané kategorie. Předem díky za odpověď

Editoval kazlik (5. 3. 2015 20:49)

David Matějka
Moderator | 6445
+
+1
-

Viz doc

$postCat->cat->name

kazlik
Člen | 19
+
0
-

Ajo, děkuji velice :)

kazlik
Člen | 19
+
0
-

Ještě se chci zeptat, jak to přidat do výpisu článků.
PostPresenter

public function renderDefault()
		{
		$this->template->posts = $this->database->table('post')
			->order('created DESC')
			->limit(5);
		foreach($this->template->posts as $post){
			$this->template->postCats = $post->related('post_cat');
			}
		}

default.latte

{block content}
<h1 n:block="title">Články</h1>

<div n:foreach="$posts as $post" class="post">
	<div class="date">{$post->created|date:'F j, Y'}</div>

	<h2><a n:href="Post:show $post->id">{$post->title}</a></h2>
	<ul n:foreach="$postCats as $postCat">
		<li>{$postCat->cat->name}</li>
	</ul>
	<div>{$post->content}</div>
</div>

Zobrazí i u 1. článku kategorie posledního (2.)
Vím, že by to asi nějak mělo být v poli ale nevím jak přesně na to

Tabetha
Člen | 140
+
+1
-

V tejto časti iteruješ nad všetkými kategoriami, zo všetkých článkov… V Presentri si naplnil pole postCats pre všetky články a iteruješ toto pole pri každom článku :)

<ul n:foreach="$postCats as $postCat">
    <li>{$postCat->cat->name}</li>
</ul>

môžeš to upraviť na

<ul n:foreach="$post->related('post_cat') as $postCat">
    <li>{$postCat->cat->name}</li>
</ul>

ak sa teda nemýlim :) a snád nie :)

Editoval Tabetha (6. 3. 2015 9:08)

kazlik
Člen | 19
+
0
-

Funguje to, děkuji, začínám to pomalu chápat :)