Nette, NotOrm, M:N problém

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

Zdravím vespolek,

řeším následující problém. Dejme tomu, že máme několik dětí a několik druhů ovoce (pro zjednodušení :) jinak bych se v tom zamotal). Mám tabulku dětí a tabulku ovoce. Jednotlivým dětem potřebuju přiřadit nejen druh ovoce co mají, ale taky počet, a tady jsem v koncích. Dokáže jednomu dítěti přiřadit banán, jablko a hrušku, ale nevím, jak v NotORM nastavit taky počet. Logicky bych to udělal tak, že v tabulce mapování ovoce na děti (ovoce_deti – dle vzoru na webu NotORM) přidám kolonku počet. Jenže jak s pomocí NotORM dostanu tuhle hodnotu, jestli jsem to dobře pochopil, tak NotORM s tabulkou ovoce_deti pracuje samo bez možnosti vytáhnout z toho data. Zatím to řeším samostatným SQL dotazem, ale to mi přijde dost kostrbaté. Díky předem za nakopnutí správným směrem :-)

P.S.: v poslední době zjišťuju, že můj život nějak nefunguje bez Nette, NotORM, Admineru a Adminer Editoru (sorry Davide, dřív tam taky bylo dibi, ale doba se mění ;-) )

dakota
Člen | 148
+
0
-

Štruktúra tabuliek:

child: id, name
child_fruit: child_id, fruit_id
fruit: id, name

Výpis:

foreach ($database->table('child') as $child) {
	echo 'Child: ' . $child->name . '<br>';
	echo 'Fruit count: ' . $child->related('child_fruit')->count() . '<br>';
	foreach ($child->related('child_fruit') as $child_fruit) {
		echo 'Fruits: ' . $child_fruit->fruit->name. ', ';
	}
	echo '<br>';
}

Dúfam že to pomôže.

Editoval dakota (19. 1. 2011 16:55)

vrana
Člen | 131
+
0
-

potapnik napsal(a):

NotORM s vazbami M:N vůbec nepracuje, zná jen vazby 1:N a N:1. Takže když chci vypsat nějaký sloupec z vazební tabulky, je to jednoduché (syntaxe NotORM):

<?php
foreach ($child->child_fruit() as $child_fruit) {
	echo "$child_fruit[number] " . $child_fruit->fruit["name"] . "\n";
}
?>

Vložení je obdobně jednoduché.

Dakota to podle mě špatně pochopil – vypisuje počet druhů ovoce.

dakota
Člen | 148
+
0
-

Ok môže byť, upravené na:

foreach ($child->related('child_fruit') as $child_fruit) {
       echo $child_fruit->number . ' '.  $child_fruit->fruit->name. '<br>';
}

Editoval dakota (19. 1. 2011 17:18)

potapnik
Člen | 127
+
0
-

Dík, mě vůbec nedošlo, že ta vazba vlastně funguje velmi jednoduše a stejně jako ostatní 1:N vazby se s ní dá normálně pracovat.