Related na špatnou tabulku
- konva
- Člen | 88
Ahoj,
mám problém s discovery reflection.
Mám následující schéma:
A když se dotazuju
$this->db->table('clanek')->where(':tags.tagsId', 1);
tak mi to zahlásí chybu
Column not found: 1054 Unknown column 'tags.tagsId' in 'where clause'
..........
LEFT JOIN `tagsNew` AS `tags` ON
Tedy chybně se mi to připojuje na tabulku TagsNew a ne na tabulku Tags.
Jde to vyřešit jinak než přejmenováním tabulky Tags?
Díky
Lukáš
- konva
- Člen | 88
Ahoj,
ty tabulky jsem tak pojmenoval pro zjednoduseni jen v ramci teto ukazky.
Problem ktery resim je v tom, ze mam jednu hlavni tabulku a na ni se odkazuji
dve tabulky s podobnym nazvem. No a discovery reflection zrejme vybere nahodne
jednu z tech dvou, protoze obe maji vazbu na tu hlavni tabulku a obe se jmenuji
podobne.
Mohu ty tabulky pojmenovat jinak to je jasny, ale me zajima jestli existuje
reseni pri takoveto strukture.
Diky
Lukas
- konva
- Člen | 88
No pokud se nepletu tak Discovery vybírá podle názvu tabulek a ne podle názvu klíče. Tedy když mám tabulku nazvanou „tags“ a ta se odkazuje na tabulku clanek „clanek“ cizim klicem, ktery je pojmenovan treba „ciziKlic1“, tak dotaz je tento
$this->db->table('clanek')->where(':tags.tagsId', 1);
a ne tento
$this->db->table('clanek')->where(':ciziKlic1.tagsId', 1);
Lukas
- hrach
- Člen | 1838
Pletes se, protoze si necetl dokumentaci. Platí to jen pro hasOne
vztah. Pro backjoin je to trochu komplikovanejsi, ale da se to tak pojmout. https://doc.nette.org/…ase/explorer#….
Editoval hrach (18. 1. 2015 20:02)
- hrach
- Člen | 1838
Muzes prosim odebugovat, proc to nefunguje?
- v metode zde https://github.com/…flection.php#L93
- ktery return ji ukoncuje,
- jaky je obsah pripadne $columnCandidates
- jaky je obsah $candidates
Jinak lezerni – smazal si cache?
- konva
- Člen | 88
kdyz jsem si to odkrokoval tak to neprojde pres tuto podminku
if (stripos($targetColumn, $table) !== FALSE) {
Je to na radku 90. Z nejakyho duvodu to pro tu tabulku tags odmitne cizi klic na tabulku clanky a vrati se k prochazeni dalsich moznosti. Pak projde az ten klic na tu tabulku tagsNew
- konva
- Člen | 88
Tak chyba byla na moji strane. Problem byl v tom, ze nazev sloupce
v tabulce „tabs“ se nejmenoval „clanekId“ ale „hlavniId“.
V tabulce „tabsNew“ se ale klicovy sloupec jmenoval „clanekId“.
V $candidates pak byli obe moznosti, ale vyhral ten klic, ktery je nazvem
podobny nazvu hlavni tabulky.
Vyresil jsem to tim, ze jsem to zapsal takto
....->related('tags.hlavniId')....
Díky za pomoc a omlouvám se za vyrušení od studií.
Lukáš