Vazba M:N pomocí related() – nefunguje

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

Ahoj,

řeším výpis hodnot databáze, kde mám vazbu M:N.
Mělo by to jít přes related(), nicméně mi laděnka píše: Nette\MemberAccessException Cannot read an undeclared column ‚category‘. Category by měl být název tabulky, je tomu tak? Laděnka říká, že neexistuje takový atribut, který v tabulce belongto není.

Zde je můj dump
Dle tohoto linku by to mělo fungovat.

Kód v presenteru:

public function renderDefault() {
    $this->template->names = $this->db->table('names')->order('n_name ASC');
}

latte:

<tr n:foreach="$names as $name">
     <td>{$name->n_name}</td>
     <td>
          {foreach $name->related('belongto') as $belongTo}
              {$belongTo->category->c_name}{sep}, {/sep}
          {/foreach}
     </td>
</tr>

Budu rád za jakékoliv rady, díky.

David Matějka
Moderator | 6445
+
+1
-

Ne tabulka, je to odvozeno od nazvu sloupce, viz doc:

https://doc.nette.org/…ase/explorer

Ř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.

Shampoo
Člen | 38
+
0
-

Zkoušel jsem i $belongTo->c_id->c_name, ale to píše: Trying to get property of non-object, až $belongTo->c->c_name funguje.
Mě právě zmátlo, že v příkladech se všude píše jen název tabulky a ono je to název cizího klíče, bez _id.

Díkes