NDB – propojeni m:n tabulek

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

Mám takovouto databázi (zjednodušeno) a chtěl bych u produktu zobrazit názvy parametrů a u každého z nich všechny propojené hodnoty.

Napadlo mě vytáhnout všechny záznamy z product_parameters

$this->context->productParameters->findBy(array('product_id' => $id))

a následně v šabloně něco jako

{foreach $product_parameters AS $param}
    <tr>
	<th>{$param->parameter->name}:</th>
	<td>{$param->parameter_option->value}</td>
    </tr>
{/foreach}

jenže to mi vypíše parametr:hodnota – musel bych tedy nějak v šabloně kontrolovat zda-li se jedná o stejný parametr a myslím že to není ta správná nette cesta

Editoval Novic (1. 9. 2012 10:43)

vvoody
Člen | 910
+
0
-

Štruktúre db nechápem, ale možno chceš vyberať dáta nasledovne:

{foreach $products as $product}
	{$produkt->cokolvek}
	{foreach $product->related('product_parameters','product_id') as $productParameter}
		{$productParameter->cokolvek}
		{? var $parameterName = $productParameter->ref('parameters','parameter_id')->name}
		{foreach $productParameter->ref('parameters','parameter_id')->related('parameter_options','parameter_id') as $parameterOption}
			{$parameterOption->cokolvek}
		{/foreach}
	{/foreach}
{/foreach}

Ak nie tak skús objasniť existenciu toho prepojenia product_parameters a parameter_options

Novic
Člen | 5
+
0
-

Zkusím to trošku popsat. Jde mi to získat např. nějaký takový seznam

barva: červená, bílá, fialová
velikost: s, m, l, xl
složení: voda, rum, pivo

Tabulky které jsou použity odpovídají:
parameters – obsahuje názvy parametrů (barva, velikost, složení)
parameter_options – obsahují hodnoty parametrů (červená, bílá, fialová, voda, rum, pivo, …)

product_parameters – je číselník parametrů a jejich hodnot pro zboží. Tzn. např.
product_id: 20
parameter_id: 1
parameter_option_id: 2
Odpovídá něco jako produkt s id 20 má nastaven parametr barva a hodnotu bílá

Používám nové nette 2.0.5 s DiscoveredReflection

Editoval Novic (1. 9. 2012 14:44)

Novic
Člen | 5
+
0
-

vvoody: vyzkoušel jsem, ale vypíše to úplně všechny hodnoty parametrů, potřeboval bych jen ty hodnoty co jsou svázané s produktem.
Omezit nějak tohle

{foreach $productParameter->ref('parameters','parameter_id')->related('parameter_options','parameter_id') as $parameterOption}
vvoody
Člen | 910
+
0
-
{foreach $productParameter->ref('parameters','parameter_id')->related('parameter_options','parameter_id')->where('parameter_id',$productParameter[parameter_option_id]) as $parameterOption}

len si nie som istý ako zapísať ten parameter s podtržítkom, snáď to pôjde cez array access.