Relace v databázi propojení více tabulek

vanaveno
Člen | 144
+
0
-

Ahojte řeším takový problém, nechápu proč mi to nefunguje. Mám tři provázané tabulky.

tabulku products(productId, name, …)
tablku categories(catId, name,…, published)
tyto tabulky jsou provázané
tabulkou categoryProduct(cpId, productId, catId)

<?php
public funcion ...
$selection = $this->database->table('products');
$selection = $selection->where(':categoryProduct.categories.published',1);
return $selection;

?>

Ta metoda vypadá samozřejmě jinak, jde mi spíše o to ::categoryProduct.categories.published',1 kde chci dostat všechny produkty, které mají nastaveny v categories published 1.

Bohužel mi to hází error
Exception in Nette\Bridges\ApplicationLatte\Template::__toString(): No reference found for $categoryProduct->categories. in /disk1/www/cz/shopfeeder/vendor/nette/database/src/Database/Table/SqlBuilder.php:689

Tabulky jsou InnoDB a samozřejmě provázané.
Kde dělám prosím chybu?

Editoval vanaveno (15. 1. 2020 23:05)

F.Vesely
Člen | 368
+
+1
-

Problém je, že Nette Database neví, že chceš spojit s tabulkou categories přes sloupec catId. V jedné tabulce můžeš mít na jinou tabulku více cizých klíčů a musíš mu říct, přes který z nich to chceš spojit. Nejlepší bude, když ten sloupec přejmenuješ na categoryId. Tohle zkracování názvů je hodně nepřehledné.

David Matějka
Moderator | 6445
+
+1
-

melo by fungovat :categoryProduct.cat.published

vanaveno
Člen | 144
+
0
-

Chlapi díky, netušil jsem, že pojmenování tabulek má také svoji roli, člověk se furt učí.

Díky za pomoc ;)