2.0.11 a změna v metodě where
- ViPEr*CZ*
- Člen | 817
Zdravím. Zkusím jsem upgrade na 2.0.11., ale jsem u drobného
problému.
Mám takovouto situaci například:
->where("localityID = ?", array(0 =>2));
což už není povoleno v nové verzi a hlásí to chybu Column operator
does not accept array argument.
Proč tomu tak je? To je BC? Jak to mám přepsat? Předem nevím kolik těch
otazníků bude condition mít, což mi přijde jako elegantní předat jako
druhý parametr pole.
- Tomas Jancik
- Člen | 103
a předat přímo jen pole nemůžeš?
->where(array('localityID' => 2, 'sloupec2' => 'neco'));
mělo by to vytvořit
WHERE localityID = 2 AND sloupec2 = 'neco'
- hrach
- Člen | 1838
K chybe: No samozrejme to mas spatne a nette te hlida, pokud chces, aby sloupec odpovidal vice hodnotam, tedy poli, pouzijes preci oprator IN.
->where("localityID IN ?", array(1, 2, 3, 4));
// funguje i
->where("localityID", array(1, 2, 3, 4));
K tomu, ze to driv fungovalo: srr, opravdu nezvladam filtrovat v hlave, co David do 2.0.x prenasi, co ne, a co muzes zpusobit vybirani jen nekterych commitu. Uz davno melo vyjit nette 2.1, ktery by melo sic. male bc breaky, ale kod je mnohem optimalizovanejsi a pro ndb odbugovanejsi…
- ViPEr*CZ*
- Člen | 817
Dobře, v pořádku. Dejme tomu, že to je BC break.
@Tomas Jancik: jako pole s klíči to předat nemůžeš, protože
nevíš předem zda-li tam je operátor OR. To co píšeš ty přidá vždy
AND.
@hrach: Tuhle syntax samozřejmě znám a využívám. Ale mému
problému to nepomůže. Ve where může být více sloupců, podmínka AND
i OR (což znemožní i vícenásobné použítí metody where).
A samozřejmě předem to nevím. Vezmu hodnoty co pošle uživatel a sestavím
řetězec s otazníky a v druhém parametru jsem předával pole, které
dosadí hodnoty za otazníky.
- David Matějka
- Moderator | 6445
co tam dat podobnou moznost jako je v nette\database\connection – metody query a queryArgs? tak do selection dat where a whereArgs, kde by se v prvnim zadavaly parametry jako jednotlive argumenty a u whereArgs by vsechny parametry byly v poli v druhem argumentu funkce. pouziti call_user_func_array se mi moc nelibi :)
- ViPEr*CZ*
- Člen | 817
hrach napsal(a):
A ten funguje?
Ten právě nefunguje. Aspoň teda ne, když je jen jeden parametr (1 otazník).
hrach napsal(a):
No, ono to vlastne fungovat bude, jen ten usecase pro sestavovani dynamickeho query bude o tom, ze
musis pri jednom parametru to nepredat jako pole.
To by právě bylo cool, kdyby to šlo bez ohledu na počet parametrů (souhlas s @matej21).
- hrach
- Člen | 1838
To by právě bylo cool, kdyby to šlo bez ohledu na počet parametrů (souhlas s @matej21).
Toto chování se určitě měnit nebude, pač je naprosto logické. Problém je daný generickým sestavováním. Na to to stavěné není. Vzhledem k tomu, že je to možné řešit, nevidím duvod přidávat do api další metodu. Určitě si můžeš napsat jednoduše obsluhu pro toto chování…