Autor Zpráva
Kcko
Profil
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
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
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
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: