Nette\Database a propojení tabulek

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

Zdravím,
jsem s Nette úplný začátečník a potřebuji poradit. Po quickstartu se snažím napsat jednoduchý systém na vkládání článků.

Mám dvě tabulky v databázi. Tabulku clanky a tabulku clanky_img. V tabulce clanky jsou textové prvky jednotlivých článků a v tabulce clanky_img jsou uložené cesty a popisky obrázků. Je tam sloupec clanek_id, kde je reference na sloupec id v tabulce clanky. Ke článku může být přiřazen žádný, jeden nebo neomezeně obrázků.

Pro práci s oběma tabulkami mám vytvořené modely a teď potřebuji udělat v presenteru výpis článků. Vždy 10 článků s obrázkem na stránce… stránkování zatím neřeším. Mám tedy:

class HomepagePresenter extends BasePresenter {
    public $articles;

    public function actionDefault() {
        $this->articles = $this->context->createClanky()->where('deleted <> 1')->limit(10);
    }

	public function renderDefault() {
        $this->template->articles = $this->articles;
    }
}

Takto mi do do templatu pošle textová data, ale já to ještě nějakým způsobem potřebuji propojit s obrázky (thumbnaily), náležícími ke každému článku a mít je u každého článku dostupné v šabloně (pokud k článku nějaké náleží). Jak to mám provést?

Editoval Ecrazit (18. 5. 2012 15:59)

jtousek
Člen | 951
+
0
-

Přečti si dokumentaci Nette\Database, to co potřebuješ se řeší pomocí metody related:

{foreach $articles as $article}
	{foreach $article->related('clanky_img') as $img}
		{* ... *}
	{/foreach}
{/foreach}

Mimochodem nedoporučuji mixování češtiny a angličtiny (tabulka „clanky“ a proměnná „$articles“), lépe pojmenovávat vše striktně anglicky.

Ecrazit
Člen | 16
+
0
-

Ok takhle to funguje. A ještě jeden dotaz k tomu, v případě, že by v tabulce byl vždy jeden nebo žádný náležící záznam, jak by to vypadalo přepsané bez {foreach}? Zkoušel jsem to a nefungovalo mi to.

Editoval Ecrazit (18. 5. 2012 19:18)

jtousek
Člen | 951
+
0
-

Nejspíš nějak takhle:

{if $img = $article->related('clanky_img')->fetch()}
	{* záznam existuje *}
{else}
	{* záznam neexistuje *}
{/if}