Problém s related() v tabulce 1:m a n:m

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

Zdravím, už se s tím mořím docela dlouho a v této fázi projektu už se tomu bohužel nevyhnu, takže půjdu k věci:

Mám tabulku kontaktů (contacts), tabulku contact_groups a mezi nimi indexovací tabulku contacts_in_groups. Relace by měly být nastaveny správně, viz obrázek.

Co potřebuji udělat je, vybrat z tabulky contacts údaje o uživatelích, kteří náleží do určité skupiny.

Když postupuji přesně podle návodu https://doc.nette.org/cs/database, dostanu PDOException No reference found for $contacts_in_groups->contacts.

V presenteru mám

<?php
	$this->template->group = $this->context->createContact_groups()->where('id = ?',$id);
?>

V šabloně

<ul>
	{foreach $group as $g}
		Group Name: {$g->name}
		<!-- Group name vypíše -->
		{foreach $g->related('contacts_in_groups') as $c}
			<li><a n:href="detail $c->contact_id" >CONTACT: {$c->contacts->name}</a></li>
			<!-- Když odstraním $c->contacts->name, tak v správně vypisuje contact_id -->
		{/foreach}
	{/foreach}
</ul>

Prosím o pomoc, už vážně netušim co s tím..

vvoody
Člen | 910
+
0
-

Išlo by ti to, keby si pomenoval FK ako ‚contacts_id‘. Ak nechápeš ako funguje discovered reflection, tak radšej z ActiveRow získavaj previazané dáta iných tabuliek pomocou metód related a ref.

enumag
Člen | 2118
+
0
-

Myslím, že by to mělo být $c->contact->name, respektive nějaký podřetězec toho „contact_id“ (od začátku).

Tohle je jeden z důvodů proč většina používá pro názvy tabulek jednotná čísla, podobné matoucí situace to poněkud redukuje.

vvoody
Člen | 910
+
0
-

Vlastne hej, pri discovered nezalezi na nazve cielovej tabulky.

maslo
Člen | 6
+
0
-

aha, tak tady byl zakopanej pes. Díky enumag, tohle zafungovalo, vvoody taky díky, i když jsem to ještě nezkusil. Asi si o tom budu muset něco nastudovat, protože opravdu nevim, jak a proč to tak funguje.. :-D