Autor | Zpráva | ||
---|---|---|---|
Kcko Profil |
#1 · Zasláno: 11. 8. 2014, 17:00:29
Předně se omlouvám, že to dávám sem, a ne na oficiální fórum (poslední reakce tam jsou několik měsíců staré).
Fluentní zápis nepoužívám , leč jsem dostal k projektu (převzal jsem), kde se využívá hodně a jsem z toho trochu neštastný. O co mi jde. Pokud napíši dotaz typu SELECT xxx FROM tabulka WHERE ((a = 1) OR (b = 2)) AND (c=3) přes fluent tak mi to takhle neozávorkuje. Resp. napíše to bez závorek, takže logika dotazu je pak špatně. Nemá tady někdo zkušenost se složitějším skládáním podmínek tak abych si mohl sám určit jak jej o uzávorkuji? |
||
Jan Tvrdík Profil |
Kcko:
Fluent nepoužívám, ale asi bude fungovat něco jako: $query->where('[a] = %i OR [b] = %i', 1, 2); $query->where('[c] = %i', 3); nebo taky: $query->where('%or', [ ['[a] = %i', 1], ['[b] = %i', 2], ]); $query->where('[c] = %i', 3); |
||
Kcko Profil |
#3 · Zasláno: 11. 8. 2014, 19:50:40
Jan Tvrdík:
Teď nemám možnost to ozkoušet ale jakmile ráno dorazím do práce, otestuju a dám vědět, díky! |
||
Kcko Profil |
#4 · Zasláno: 12. 8. 2014, 10:10:32
Jan Tvrdík:
Tak první způsob nefunguje. $query = $this->crmKontaktyModel->findAll(); $query->where('1 = %i OR 1 = %i', 1, 2); $query->where('1 = %i', 3); SELECT SELECT ... FROM tabulka WHERE 1 = 1 OR 1 = 2 AND 1 = 3 A druhý způsob vygeneruje, což taky není úplně ono ... WHERE (1 = 1) OR (1 = 2) AND 1 = 3 |
||
Jan Tvrdík Profil |
#5 · Zasláno: 12. 8. 2014, 12:25:01
Kcko:
Tak tam holt musíš dát ty závorky ručně: $query->where('([a] = %i OR [b] = %i)', 1, 2); $query->where('[c] = %i', 3); |
||
Alphard Profil |
#6 · Zasláno: 13. 8. 2014, 00:24:09
Můžeš si jednotlivé části připravit do pole a pak ho expandovat.
$cond = [ ['a = %i', 1], ['b = %i', 2], ]; $s->where('(%or)', $cond); $s->where('c = %i', 3); |
||
Kcko Profil |
#7 · Zasláno: 13. 8. 2014, 09:55:48
Alphard:
Díky to už je lepší, prvotně jsem si to vyskládal sám a celé to hodil do where, ale mám to k tomu uložené, kdybych to potřeboval. |
||
Časová prodleva: 10 let
|
0