NDB – propojeni m:n tabulek
- Novic
- Člen | 5
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
Š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
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)
- vvoody
- Člen | 910
{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.