vložení výpisu z databáze doprostřed jiného výpisu

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

V databázi mám dvě tabulky: zakázky a commenty (comment má pochopitelně column zakazka_id).

Vypsat zakázky je snadné, ale nevím jak během výpisu zakázek zavolat dotaz na commenty, které danou zakázku vypisují:

výsledkem by mělo být toto:

zakázka číslo 1 a její vlastnosti v jednom řádku
comment číslo 2 k zakázce č.1
comment číslo 7 k zakázce č.1
comment číslo 9 k zakázce č.1

zakázka číslo 2
comment číslo 1 k zakázce č.2
comment číslo 3 k zakázce č.2
comment číslo 4 k zakázce č.2

V klasickém PHP je to jednoduché, prostě doprostřed každého dotazu vrazím další while…

Prosím poraďte mi jak nejlépe na to v Nette?

dez1nd
Člen | 7
+
0
-
<?php

foreach ($comments as $comment)
{
    foreach($zakazky as $zakazka)
	{
		echo $zakazka."".$comment;
	}
}

?>

Nějak takhle a předělat do latte maker ?
// Jestli se pletu tak promiň, jen mě to napadlo začal jsem s nette cca 14 dní zpět.

Editoval dez1nd (15. 3. 2017 12:44)

Mysteria
Člen | 797
+
+2
-

S použitím Nette Database Table nejjednodušeji asi takto, samozřejmě názvy sloupců si musíš upravit na vlastní strukturu.

// Presenter
$this->template->contracts = $this->database->table('zakazka');
// Latte
{foreach $contracts as $contract}
	Název: {$contract->name}
	Komentáře:
	{foreach $contract->related('comment')->order('id') as $comment}
		{$comment->content}
	{/foreach}
{/foreach}

Editoval Mysteria (15. 3. 2017 13:32)

kolaloka
Člen | 69
+
0
-

aha, takže to je přes ten trik s „related“ – to jsem právě nevěděl, hned to jdu zkusit, díííky moc všem za pomoc.

kolaloka
Člen | 69
+
0
-

Takže, sice to řešení bylo malinko jiné, než píše Mysteria, ale to vůbec nevadí, patří mu velký dík, protože to mě postrčilo správným směrem, funguje mi to následovně: (kdyby někdo řešil to samé)

<?php
// Presenter přesně jak píše Mysteria
$this->template->zakazka = $this->database->table('zakazka')

// Late ale takto:
	{foreach $zakazka as $order}
	    Název: {$order->name}
        Komentáře:
		{foreach $order->related('comment','zakazka_id') as $comment}
		    {$comment->text}
	    {/foreach}
	{/foreach}
?>

Je to vlastně typická relace „has many“, jak ji uvádí dokumentace nette database.
Takže ještě jednou veliký dík, Mysteria!

Editoval kolaloka (15. 3. 2017 21:54)