Nette\Database related špatný where
- Rafan
- Člen | 17
Dobrý den,
opět se peru se Nette Database. Mám kód
foreach($product->related('product_labels', ':product_label.product_id') as $labels)
{
$result[$id]["labels"][] = $labels["label_id"];
}
díky kterému bych chtěl získávat štíky k produktům. Tento kód mi generuje SQL:
SELECT `product_labels`.*
FROM `product_labels`
LEFT JOIN `product_label` ON `product_labels`.`id` = `product_label`.`label_id`
WHERE (`product_labels`.`product_label`.`product_id` IN (59077, 59076, 59080, 59079, 59081))
Tento SQL kód by byl super kdyby ve WHERE nebyla ta část
„product_labels
.“. Je možné aby podmínka WHERE vypadala
pouze takto?
WHERE (`product_label`.`product_id` IN (59077, 59076, 59080, 59079, 59081))
Potom by to fungovalo tak jak potřebuji.
Bohužel nenašel jsem žádný návod jak v metodě related zajistit další join(y). Co jsem vytvořil bylo metodou pokus omyl.
Děkuji za pomoc.
- CZechBoY
- Člen | 3608
Asi ses upsal a nenapsal si „s“ do druhého parametru product_labels?
foreach($product->related('product_labels', ':product_labels.product_id') as $labels)
{
$result[$id]["labels"][] = $labels["label_id"];
}
Pokud ne tak je ta struktura db zmatečná a nepochopil jsem ji.
Editoval CZechBoY (10. 4. 2017 14:51)
- norbe
- Backer | 405
Bude to tedy spíš chtít získávat related záznamy z tabulky ‚product_label‘ a do product_labels se dostat skrz jednotlivé záznamy, cca takto (jestli jsem správně pochopil strukturu těch tabulek):
foreach($product->related('product_label', 'product_id') as $label)
{
$result[$id]["labels"][] = $label->label["label_id"]; // případně jen $label->label_id, nevím zda jsi předtím chtěl uložit sloupec label_id z tabulky product_label nebo product_labels
}
Editoval norbe (11. 4. 2017 9:12)