Relace v databázi propojení více tabulek
- vanaveno
- Člen | 144
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 | 369
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é.