Oznámení
Omlouváme se, provoz fóra byl ukončen
Podmíněné podmínky a jejich automatické spojování pomocí AND
Upozornění: Tohle vlákno je hodně staré.
před 7 lety
- besir
- Člen | 177
Ahoj,
mám nějaký takovýto model v nette
public static function getLikeProperties($args) {
$arr = array('locality' => null,
'type' => null,
'size' => null,
'category' => null);
$arr = array_merge($arr, $args);
$limit = isset($arr['limit']) ? $arr['limit'] : 4;
return dibi::fetchAll('SELECT [p.id], [p.name], [pt.name] as type,
[ps.value] as size,
(SELECT [pi.uri] FROM [properties_images] as pi
WHERE [pi.property_id] = p.id) as image
FROM [properties] as p
LEFT JOIN ([properties_type] as pt,
[properties_sizes] as ps,
[properties_locality] as pl,
[properties_category] as pc)
ON ([p.type_id] = [pt.id] AND [p.size_id] = ps.id)',
'%if',
(isset($arr['type']) or
isset($arr['locality']) or
isset($arr['size']) or
isset($arr['category'])),
'WHERE',
'%if', $arr['type'] != null,' [pt.name] IN %l', $arr['type'],
'%if', $arr['locality'] != null,' AND [pl.name] IN %l', $arr['locality'],
'%if', $arr['size'] != null,' AND [ps.value] IN %in', $arr['size'],
'%if', $arr['category'] != null,' AND [pc.name] IN %in', $arr['category']);
}
asi nemusím říkat co to má vracet.
Otázka, jak to mám potunit aby se poslední 4 %if spojili automaticky pomocí AND pokud nejsou jediný? Vše samozřejmě funguje pokud je vždy nastavený $arr[‚type‘], ale nemusí být. Zatím mám hotfix style 1=1, ale to se mi nezdá jako best practice.
Díky
před 7 lety
- Felix
- Nette Core | 898
Ja bych pouzil dibi fluent a neceho jako
$sql = dibi::select(..);
if (isset($arr['type'])) {
$sql->where(..);
}
Editoval Felix (12. 9. 2012 21:48)