Closed janpecha closed 6 years ago
Pouziti m:filter
obecne nedoporucuju - jednak kvuli samotne registraci filtru, tak kvuli pouziti v entite, zejmena pri vyskytu u vice property zaroven - vznikaji tim jen problemy (napr u 2 property je orderby, jak se to ma seradit?). Doporucuju pouzivat pristup tvorby dotazu pres QueryObject.
Jj, m:filter
taky obecně nedoporučuju, ale v některých případech se hodí anonymní filtr (objekt Filtering
) a tam vznikne stejný problém - syntax error, případně špatně sestavené SQL.
BTW jak myslíš to "napr u 2 property je orderby, jak se to ma seradit?" ?
no mas 2 property (X a Y) s anotaci m:filter(#orderby)
vysledny dotaz ma byt order by X nebo order by Y nebo oboje zaraz a pokud oboje, v jakem poradi?
jeste dodam, ze problem muze byt skryty v pripade dedicnosti a zejmena pak tezko upravitelny, pokud uz tam jeden takovy filtr je - dojde k ovlivneni vsech dotazu na danou entitu. To samo o sobe je duvodem, proc m:filter vubec nepouzivat
Tak to by neměl být problém - buď přistupuješ přes $entity->x
(a dotáhnou se data s ORDER BY x), nebo přes $entity->y
(a dotáhnou se data s ORDER BY y). Ale rozhodně souhlasím, že filtry se většinou nevyplácí příliš kombinovat a je lepší použít query object.
Dnes jsem na tento problém znovu narazil v souvislosti s LeanMapperQuery - https://github.com/mibk/LeanMapperQuery/pull/3
Našel jsem 2 bugy při použití UNION strategie.
1) pokud do dotazu filtrem přidám klauzuli
LIMIT
, rozbije se generování dotazu a použije se jen jeho první část, tj. místo dotazuse vygeneruje jen
takže nedojde k načtení všech dat. Problém způsobil pravděpodobně tento commit v dibi. Pokud se výsledek nelimituje, je vygenerovaný dotaz v pořádku.
LIMIT
neboORDER BY
vyhodí nám SQLite chybu. Řešit se to dá pomocí subselectů: