Grido – strasne vela query

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

Prosim o pomoc v bezradnej situacii. Pre kazdy riadok a pre kazdy stlpec, v ktorom odkazujem napr. $item->cat->title namiesto LEFT JOIN urobi novy select. Mam 50 zaznamov a 300 selectov :-(

Prosim pomozte… Ako to mam riesit? Dakujem za kazdu relevantnu pomoc.

$item->ref taktiez nefunguje.

Do pola hodnoty nemozem nacitat, lebo ich je vela, takze $grido->model(array(…)) sa neda pouzit. Ako mam grido pouzit s vlastnym query aby fungoval paginator, sorting, filtering?

$grid->addColumnText('article_cat', 'Article')
        ->setColumn(function($item){
            if(!empty($item->cat_id)) {
                return $item->cat->title;
            }
        })
        ->setFilterText()
        ->setColumn('cat.title');

Editoval steelbull (9. 4. 2015 20:18)

Jiří Nápravník
Člen | 710
+
+1
-

Nevím, co pouzivas na pripojeni k databazi. Ale bude to jiste podobne. Ja mam doctrine a pouzivam:

$grid->setModel(new Doctrine($this->backlinkFacade->getBacklinkQueryBuilder()));

a ten querybuilde ma v sobe left, ci-li uz se nepoklada dalsi dotaz

steelbull
Člen | 241
+
0
-

Jiří Nápravník napsal(a):

Nevím, co pouzivas na pripojeni k databazi. Ale bude to jiste podobne. Ja mam doctrine a pouzivam:

$grid->setModel(new Doctrine($this->backlinkFacade->getBacklinkQueryBuilder()));

a ten querybuilde ma v sobe left, ci-li uz se nepoklada dalsi dotaz

Urobil som to nakoniec tak, ze som vytvoril view. Ale mam dalsi problem. View v MSSQL nemoze mat primary key a Nette niekedy vyhodi vynimku Logic Exception. Zalozil som v tejto suvislosti novu temu.

Mysteria
Člen | 797
+
+1
-

NDBT a view se nemají moc rádi no. Buď nepoužívat view nebo u sebe to řeším tak, že místo discovered reflexion používám conventional, pak se mi tahle chyba neobjevuje (ale to lze udělat samozřejmě pouze pokud tak máš navrženou databázi).

steelbull
Člen | 241
+
0
-

Mysteria napsal(a):

NDBT a view se nemají moc rádi no. Buď nepoužívat view nebo u sebe to řeším tak, že místo discovered reflexion používám conventional, pak se mi tahle chyba neobjevuje (ale to lze udělat samozřejmě pouze pokud tak máš navrženou databázi).

A aky je rozdiel medzi discovered a convention?

Keby som presiel na dibi tak by to nepomohlo?

Mysteria
Člen | 797
+
0
-

Hlavní rozdíl je v tom, že discovered si zjišťuje referenční integritu z cizích klíčů (na použití ref a related metod), kdežto conventional podle názvu sloupců, že třeba sloupec category_id v tabulce item odkazuje na sloupce id v tabulce category a podobně.

Případně máš ještě možnost na to view použít normálně NDB query a napsat si dotaz ručně, pokud nepracuješ s view tak často.

steelbull
Člen | 241
+
0
-

Mysteria napsal(a):

Hlavní rozdíl je v tom, že discovered si zjišťuje referenční integritu z cizích klíčů (na použití ref a related metod), kdežto conventional podle názvu sloupců, že třeba sloupec category_id v tabulce item odkazuje na sloupce id v tabulce category a podobně.

Případně máš ještě možnost na to view použít normálně NDB query a napsat si dotaz ručně, pokud nepracuješ s view tak často.

Ten view som ale robil prave preto, lebo sa jedna o zlozite query, ktore pouzivam v datagride grido a ked som to robil nie cez view ale cez netteDatabase tak pri $item->article->cat->title to geneovalo stale novy query pre kazdy riadok. Tak som urobil view, kde som si vytiahol vsetky data, ale opat je to problem. Keby som presiel na dibi fungovalo by to bez problemov?

Mysteria
Člen | 797
+
0
-

Jestli DiBi pomůže, tak to nevím, používám jenom NDBT v kombinaci s NDB pro složité dotazy, které nelze prostřednictvím NDBT nějak rozumně napsat.

steelbull
Člen | 241
+
0
-

Skusam prave maly HACK v DiscoveredReflection, tak uvidime. NTBD je OK, ale ako potom robis, ked mas zlozite data s count, max, min, group… a potom to cele potrebujes vyplut do datagridu a nad tym este triedit, vyhladavat, filtrovat?