Nepovinná podmínka ->where() v Nette\Database

Dan Hundrt
Člen | 74
+
0
-

Zdravím,

rád bych se zeptal, jak se obecně řeší následující. Mám v modelu metodu, která vrací pole s produkty:

$data = $this->database
				->table('product')
				->select('*')
				->where(['public' => 1, 'category_id' => $category])
				->limit($limit)
				->fetchAll();

Potřeboval bych tam však dodat nepovinnou podmínku na filtrování cen:

$data = $this->database
				...
				->where(['price >' => $query['priceFrom'], 'price <' => $query['priceTo']])
				...

Rád bych se zeptal, jak to co nejelegantněji předat podmínku, bez šíleného ifování. $query si předám v parametru meodoty, pokud není dostupná, vrací NULL.

Díky

Editoval Dan Hundrt (16. 7. 2018 23:49)

Phalanx
Člen | 310
+
+3
-
<?php
$data = $this->database->table('product')->where('public=1 AND category_id=?', $category);

if () {
	$data->where('price > ? AND price < ?', $query['priceFrom'], $query['priceTo']);
}

$result = $data->limit($limit)->fetchAll();

?>
Dan Hundrt
Člen | 74
+
0
-

Super, díky.

ForestCZE
Člen | 209
+
-1
-

Dan Hundrt napsal(a):

Zdravím,

rád bych se zeptal, jak se obecně řeší následující. Mám v modelu metodu, která vrací pole s produkty:

$data = $this->database
				->table('product')
				->select('*')
				->where(['public' => 1, 'category_id' => $category])
				->limit($limit)
				->fetchAll();

Potřeboval bych tam však dodat nepovinnou podmínku na filtrování cen:

$data = $this->database
				...
				->where(['price >' => $query['priceFrom'], 'price <' => $query['priceTo']])
				...

Rád bych se zeptal, jak to co nejelegantněji předat podmínku, bez šíleného ifování. $query si předám v parametru meodoty, pokud není dostupná, vrací NULL.

Díky

Mimochodem, je nesmysl používat ->select(‚*‘)

Jednak není třeba tahat vše, když třeba se vším ani nepracuješ a za druhé si Nette samo zjistí, s čím pracuješ a to si za cachuje a pracuje jen s tím :)