No reference found – problém ve vazbě která je
- Webster.K
- Člen | 211
Zdravím všechny, řeším chybu mezi tabulkami. Mám dvě tabulky:
servisni_zasahy a servisni_zasahy_info. Tabulka info má sloupec, který je
pojmenovaný jako servisni_zaznam, tento sloupec je cislo a je na nem cizí
klíč, který odkazuje na primární klíč s A_I v tabulce servisních
zásahů. Nadřazena tabulka tabulce servisni_zasahy je tabulka cars, kde je ID
jako A_I a v servisních zásahách je sloupec id_auta.
V presenteru mám dotaz:
$this->template->szInfo = $this->database->table('servisni_zasahy_info')->where('cars.id_auta',$id);
a v šabloně pak:
{foreach $szInfo as $vypis}
{$vypis->polozka}
{/foreach}
Když tohle zavolám, vrátí to chybu: No reference found for $servisni_zasahy_info->servisni_zasahy. Nicméně když otevru třeba PhpMyAdmin, a dám vložit záznam do tabulky servisni_zasahy_info, u hodnoty servisni_zasah je rozbalovací menu co to bere ze servisních zásahů, takže očekávám, že tam vazba je. Když otevru navrhář tak tam mezi tabulkama správně vidim i čáry (vazby) a když dám zobrazení relací v tabulce servisni_zasahy_info, tak tam vidim omezení cizího klíče, které je správně. Nicméně i přesto mi to nefunguje. Všude na ostatních místěch kde relace používám to jede na pohodu, jen mezi těmito dvěma tabulkama je problém. Někdo nějaký nápad?
- m.brecher
- Generous Backer | 863
Ahoj,
Na 90% odhaduji, že pokud chceš v Exploreru provádět výběr podle sloupců v nadřazených tabulkách, musíš dodržet určitou konvenci názvů sloupců, kde máš cizí klíče.
Jednak nemáš kompletní cestu v dotazu, uveď plnou cestu z tabulky servisni_zasahy_info do tabulky car:
$this->database->table('servisni_zasahy_info')->where('servisni_zasahy.car.id', $id)
Pro cizí klíče používej nejlépe názvoslovnou konvenci ref_table_id ⇒ ref_table.id, ta funguje v Exploreru nejlépe.
Pojmenuj si primární klíče v tabulkách id (nejlépe autoincrement) a odkazující sloupce takto:
servisni_zasahy_info.servisni_zasahy_id ⇒ servisni_zasahy.id
servisni_zasahy.car_id ⇒ car.id
Potom SQL dotaz, který jsem uvedl výše fungovat bude.
Já takovouto konvenci používám už hodně dlouho a mám s ní nejlepší zkušenosti.
- Webster.K
- Člen | 211
Tak jsem zjistil, že tohle, že funguje je spíš náhoda. Že to, díky čemu to opravdu funguje jsou jména klíčů. Bez ohledu na to, jak se jmenuje sloupeček, pokud je tam správně udělána vazba, tak do ->ref(‚jmeno klice‘) zadam toto a funguje to naprosto spolehlivě a to i přes tabulku která je n:m