Nette\Database related špatný where

Rafan
Člen | 17
+
0
-

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
+
0
-

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)

Rafan
Člen | 17
+
0
-

Právě že ne jedná se o jinou tabulku do které se potřebuji joinout.

product_labels – obecné informace o štítkách
product_label – spojovací tabulka obsahuje sloupce product_id + label_id

filsedla
Člen | 101
+
0
-

Ono je možné jako 2. parametr related() napsat něco jako ':product_label.product_id'? (já myslím, že ne)

Rafan
Člen | 17
+
0
-

Tak až na to že se do where uvedou obě tabulky a pak až název sloupce tak ten join funguje :)

filsedla
Člen | 101
+
0
-

No právě :-) …

Jestli chceš přes related() „přelézt“ přes dvě tabulky, tak to bohužel nejde.

Rafan
Člen | 17
+
0
-

Aha rozumím, škoda. Kdyby mi to hodilo hlášku typu error, ale tím že jsem tam v SQL ten LEFT join viděl tak sem myslel že omezit nebo upravit ten WHERE už půjde. Děkuji za info.

norbe
Backer | 405
+
0
-

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)