Nette\Database, ref() a order
- elden46
- Člen | 37
Zdravim,
mam ve starsim projektu, ktery je postaven nad Nette\DB a zaroven nema uplne
spravne pojmenovane vsechny sloupce tabulky pro reflekci, problem.
Mam tabulku ‚orderhasitem‘ (id, order_id, item_id), ze ktere selektim
vsechny polozky podle ‚order_id‘.
Mam tabulku ‚item‘ (id, category_id, name)
Mam tabulku (sic!) ‚categories‘ (id, parent_id, name)
Potreboval bych selektit z ‚orderhasitem‘ vsechny polozky podle ‚order_id‘ tak, aby byly serazeny joinem na categories category_id->parent_id->name, tj. abecedne podle predka kategorie, ve ktere se item nachazi.
Celou konstrukci mam nyni resenu v latte jako
{foreach $order->related('orderhasitem') as $inorder}
a doufal jsem, ze pujde podobne vyresit i razeni, neco jako
{foreach $order->related('orderhasitem')->ref('categories','orderhasitem.item.category_id')->ref('categories','orderhasitem.item.categories.parent_id')>order('orderhasitem.item.categories.categories.name') as $inorder}
ale zjevne jsem uplne mimo a ref() se tady vubec pouzit neda.
Poradi prosim nekdo?
- elden46
- Člen | 37
Taky je navic ten problem, ze join na na ketogorie je veden spatne syntakticky pojmenovanou tabulkou a klicem (tabulka categories, klic v item je category_id) a navic potrebuji radit ne podle kategorie, ale podle nadrazene kategorie (join categories na categories pres parent_id).
hrach napsal(a):
neco jako
{foreach $order->related('orderhasitem')->order('item.category.name') as $inorder}
- elden46
- Člen | 37
hrach napsal(a):
neco jako
{foreach $order->related('orderhasitem')->order('item.category.parent.name') as $inorder}
Bohuzel nejde.
Takto bych to mohl pouzit, kdyby se joinovana tabulka jmenovala category a klic z item by byl category_id. Ale i tak Nette/DB nepozna, jak najoinovat dalsi tabulku kategorii pres klic parent_id sama na sebe.
Navic, jak jsem psal, tabulky nejsou pojmenovane spravne, takze item.category_id je cizim klicem do categories
Nad GroupedSelection nejak nedokazu vynutit, jak se ma vsechno projoinovat (nejaka obdoba ref()). Takze jsem ztracen :-(
- elden46
- Člen | 37
Bohuzel nejede = nedokazal najit spravnou tabulku pro join.
Ano, DiscoveredReflection by to snad vyresily, projekt je ale podedeny po nekom cizim a klice nejsou nikde nadefinovany, takze by je to chtelo dopsat a vubec zjistit, jeslti to pouzite mysql zvladne…
Vyresil jsem problem (velmi neelegantne) tak, ze si $inorder sestavuji jiz v prezenteru pomoci database->query() a do ni si dotaz napisu v cistem sql. Spatne, ale funkce:-(
- vvoody
- Člen | 910
Je nejaký problém prepnúť na DiscoveredReflection? Aká reflection tam je nastavená teraz? Conventional, alebo nejaká vlastná?
edit: to som vydedukoval že problém je s joinom tabuľky, podstatné je ale z ktorej do ktorej je problém, v exception to je napísané.
Editoval vvoody (13. 8. 2013 16:46)