NDB Problém se stejným nazvem sloupce v JOINu

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

Zdravim, narazil jsem na problem ktery neumim vyresit.
Mam join s ref vazbou na ciselnik a zakaznika problem je ze tabulka ma sloupec „nazev“ i tabulka zakaznika, problem je ze mi $row->nazev veme nazev z vazby na zakaznika (to same jako $row->zakaznik->nazev).
Nette slozilo tento dotaz

SELECT
`prilezitost`.`nazev`,`prilezitost`.`ciselnik_prilezitost_faze_id`,`ciselnik_prilezitost_faze`.`faze`,`prilezitost`.`zakaznik_id`,`zakaznik`.`nazev`,`prilezitost`.`hodnota`,`prilezitost`.`datum_ocekavaneho_uzavreni`,`prilezitost`.`datum_vytvoreni`,`prilezitost`.`id`
FROM `prilezitost`
LEFT JOIN `ciselnik_prilezitost_faze` ON `prilezitost`.`ciselnik_prilezitost_faze_id` =
`ciselnik_prilezitost_faze`.`id`
LEFT JOIN `zakaznik` ON `prilezitost`.`zakaznik_id` = `zakaznik`.`id`
LIMIT 20

Nette 2.3.10 / PHP 5.6.15

norbe
Backer | 405
+
0
-

A jakým kódem načítáš ta data?

lukyrys
Člen | 36
+
0
-

To je trochu slozitejsi nicmene je to vlastni datagrid, ktery sklada tabulku na zaklade nejake struktury v jsonu z databaze.
Je to v podstate popis sloupcu v jsonu ktery pak foreachem vypisuju, kdyz jsem se snazil vylamat nejaky priklad pouziti doslo mi ze skladam vlastni select tzn do $this->database->table(…)->select() udelam vycet sloupcu viz

$table->select("prilezitost.nazev,prilezitost.ciselnik_prilezitost_faze_id,ciselnik_prilezitost_faze.faze,prilezitost.zakaznik_id,zakaznik.nazev,prilezitost.hodnota,prilezitost.datum_ocekavaneho_uzavreni,prilezitost.datum_vytvoreni,prilezitost.id")

tenhle selection pak vypisuju v sablone zpusobem $row->{$col[‚col‘]}; zadna jina magie nad tim neni. Je mozny ze nette to s vlastni definici v selectu nepochopi?

norbe
Backer | 405
+
+2
-

Nette to pochopi, ale jak má podle Tebe vytáhnout 2 hodnoty do stejně pojmenovaného sloupečku (viz ten select)?

Pokud to chceš všechno vytáhnout takhle v jednom dotazu, můsíš si tam dát nějaký alias, třeba zakaznik.nazev AS zakaznik_nazev.

lukyrys
Člen | 36
+
0
-

No preci jeden bych mel vytahnout jako $row->nazev a druhy jako $row->zakaznik->nazev, v selectu je definovany cely nazev i s tabulkou. Kdyby to bylo bez select() a nette si to slozilo samo tak by dotaz mel byt cca stejny a fungovalo by to presne takto $row->nazev / $row->zakaznik->nazev nebo si nette zavola nad tim dalsi dotaz ktery vytahne row primo pro zakaznika a s joinutyma sloupcema se nezabyva?
@norbe O aliasu jsem uvazoval ale prave v tomhle pripade bych musel dopisovat nejakou dalsi logiku ktera by to umela nejak sama pojmenovat a pak opet znova zpatky rozlozit prave kvuli tomu ze je tam nad tim to schema z jsonu

norbe
Backer | 405
+
+1
-

Přesně tak, když přistoupíš na $row->zakaznik, nette si položí další dotaz, kterým si ty data natáhne (jak píšeš, nedělají se žádné joiny). Pokud nad selection voláš select, bereš na sebe odpovědnost, co se ti dostane do kterého sloupečku…