Nefungující výběr podle cizího klíče

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
plech
Člen | 7
+
0
-

Ahoj, pro mě z nepochopitelného důvodu mi laděnka hlásí chybu při výběru tabulky podle cizího klíče:

mám tabulku „zbozi“, primární klíč „id_zbozi“
mám tabulku „prodejniZbozi“, primární klíč „id_prodejni_zbozi“
mám tabulku „vyroba“, kde je cizí klíč „id_prodejni_zbozi“ a „id_zbozi“

<?php
{foreach $vyroby as $vyroba}
  {$vyroba->zbozi->nazev_zbozi}
  {$vyroba->prodejniZbozi->nazev_prodejni_zbozi}
{/foreach}
?>

Zajímavé je, že {$vyroba->zbozi->nazev_zbozi} se vypíše v pořádku, {$vyroba->prodejniZbozi->nazev_prodejni_zbozi} skončí s chybou "Cannot read an undeclared column "prodejniZbozi""

laděnka

PHP 5.3.3
Nette jsem zkoušel poslední verzi stable 2.0.10 i 2.1-dev.

Díky.

enumag
Člen | 2118
+
0
-

Reference na cizí tabulku není dle názvu tabulky ale dle názvu toho sloupce kterým odkazuješ. Tzn. v tvém případě ne prodejniZbozi ale prodejni_zbozi.

Btw. velká písmena v názvech tabulek vřele nedoporučuji. MySQL to velmi ráda blbne.

Editoval enumag (10. 4. 2013 0:11)

plech
Člen | 7
+
0
-

Díky, vyřešeno.

Z prvotního tutoriálu to nebylo možné tak dobře pochopit:

„Další zajímavostí je konstrukce $task->user->name. Jak již bylo řešeno v předchozí části věnované databázi, sloupec user_id považuje databázová vrstva za odkaz na tabulku user. Díky tomu se pak můžeme takto odkázat na tabulku user.“

K Btw.: Tabulky tak mám pojmenované, abych mohl ve třídě ProdejniZboziRepository používat funkci getTable(). Nebo se mýlím?
Díky.

enumag
Člen | 2118
+
0
-

To sice jo ale když budeš takovou databázi přenášet mezi linuxem a windows tak ti to ty písmena zmenší. Je to kvůli tomu že windows jsou case-insensitive pokud jde o názvy souborů. Osobně bych použil strtolower nebo funkci která camelCase převede na camel_case.