zobrazní dat z tabulky s cizími klíči

ales23
Člen | 10
+
0
-

Ahoj, vytvořil jsem si dtb tabulku s články a do některých polí ukládám jen cizí klíče (int).

V databázi jsou cizí klíče:

author_id na tabulku authors, která obsahuje id, name
category_id na tabulku category, která obsahuje id, name

V modelu mám metodu:

	public function findPublishedArticles(int $limit, int $offset)
	{
		return $this->database->table('articles')
			->order('created_at DESC')
			->limit($limit, $offset)
			->fetchAll();
	}

V presenteru je

		$articles = $this->articleManager->findPublishedArticles($paginator->getLength(), $paginator->getOffset());
		$this->template->articles = $articles;

V šabloně se to zobrazuje správně, vč. stránkování, tedy výpis všech článků seřazený od nejnovějších, ale problém je, že výstupem je v šabloně author_id a category_id jako číslo, nikoli jméno autora a název kategorie. Prošel jsem si dokumentaci k nette database explorer a rozumím tomu v případě konkrétního řádku, ale jak to vyřešit hromadně pro všechny záznamy jsem nenašel. Budu moc vděčný za pomoc. Díky.

David Matějka
Moderator | 6445
+
0
-

nemusis to resit nijak „hromadne“, v sablone pri vypisovani toho clanku proste vypises {$article->author->name} a database explorer se o to postara

ales23
Člen | 10
+
0
-

Bohužel mi na to Tracy odpoví: Trying to get property of non-object a ukáže na ten záznam v šabloně

{foreach $articles as $article}
<p>{$article->author_id->name}</p>

{/foreach}

David Matějka
Moderator | 6445
+
0
-

article->name, nikoliv article_id->name

z dokumentace:

Řekněme, že chceme vybrat všechny knihy, které napsal autor jménem Jon. Musíme napsat pouze jméno spojovacího klíče relace a název sloupce spojené tabulky. Spojovací klíč je odvozen od jména sloupce, který odkazuje na tabulku, se kterou se chceme spojit. V našem příkladu (viz databázové schéma) je to sloupec author_id, ze kterého stačí použít část – author. name je název sloupce v tabulce author. Můžeme vytvořit podmínku také pro překladatele knihy, který je připojen sloupcem translator_id.

Editoval David Matějka (17. 11. 2020 20:51)

ales23
Člen | 10
+
0
-

Děkuji, už to funguje. Mimochodem, tu dokumentaci jsem četl, ale prostě ne všechno je začátečníkovi zřejmé.