Oznámení
Omlouváme se, provoz fóra byl ukončen
Podmíněné SQL příkazy + Fluent syntax
Upozornění: Tohle vlákno je hodně staré.
před 9 lety
- ezimir
- Člen | 21
Je spôsob ako dosiahnuť nasledovné…
$result = dibi::select('*')
->from('whatever');
if ($id) {
$result = $result
->where('[row_id] = %i', $id);
}
$result = $result
->fetchAll();
… pomocou fluent syntaxe? Niečo takéto:
$result = dibi::select('*')
->from('whatever')
->where('%if', $id, '[row_id] = %i', $id, '%end')
->fetchAll();
// SELECT * FROM `whatever` /* WHERE `row_id` = 5 */;
Rád by som sa vyhol tomu if-u. Dá sa to? (dibi::query
samozrejme tento problém rieši, ale rád by som zostal pri fluent syntax).
Niečo takéto funguje:
$result = dibi::select('*')
->from('whatever')
->where('%if', $id, '[row_id] = %i', $id, '%else', '[row_id]', '%end')
->fetchAll();
// SELECT * FROM `whatever` WHERE /* `row_id` = NULL */ `row_id`
ale predsa len tá else vetva je tam ohyzdná… Dá sa skyť, ale aj takto
je tam nepotrebnosť v podobe WHERE
:
$result = dibi::select('*')
->from('whatever')
->where('[row_id]', '%if', $id, ' = %i', $id, '%end')
->fetchAll();
// SELECT * FROM `whatever` WHERE `row_id` /* = NULL */
:)
Editoval ezimir (22. 12. 2010 15:37)
před 9 lety
- Milo
- Nette Core | 1119
Myslím, že v současné době to nejde. Klíčové slovo
WHERE
se do SQL vloží vždy. Možná David ví o nějakém
způsobu. Já to dělám podobně jako ty s else.
->where('%if', $id, '[col] = %i', $id, '%else %b', true, '%end')
před 9 lety
- Milo
- Nette Core | 1119
Nebylo by špatné třeba:
select('*')->from('tab')->if($id)->where( '[col] = %i', $id )->end();
:)