Problém s WHERE .. LIKE a defaultValue u formulára
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- bobo
- Člen | 2
Ahoj,
chcel by som na svojom projekte rozbehať také základné filtrovanie. Vo
formulári mám tri selecty, každý má nastavenú defaulValue na „%“. Po
odoslaní formulára potom volám
$this->template->jednotky = $this->ulozneJednotkyRepository->findByFirma($this->firma)
->where(array('vyradenie'=>NULL))
->where('reg_znacka LIKE ? AND rok_vzniku LIKE ? AND typ_jednotky LIKE ?',$form->values->znacka, $form->values->rok, $form->values->typ);
V prípade, že vyberiem všetky tri selecty s údajmi, ktoré dohromady dávajú existujúci záznam v DB tak to funguje. V prípade, že ale vyberiem napr. len rok tak sa nič nestane. Cez SQL nad databázou mi dotaz funguje v poriadku. Vďaka
SELECT * FROM ulozne_jednotky WHERE 'reg_znacka' LIKE '%' AND 'rok_vzniku' LIKE '2009' AND 'typ_jednotky' LIKE '%';
Editoval bobo (18. 11. 2013 20:50)
- Oli
- Člen | 1215
Řekl bych, že pokud něco neuvedeš, tak to vrací NULL. Potom ti to teda
najde v db záznamy treba
reg_znacka LIKE nejaka_znacka AND rok_vzniku LIKE NULL AND typ_jednotky LIKE NULL
.
Proto ti to jde, jen když vybereš všechny 3.
Udělal bych to takhle:
$where = array();
$where['vyrazenie'] = NULL;
!is_null($form->values->znacka) ? $where['reg_znacka LIKE'] = $form->values->znacka;
!is_null($form->values->rok) ? $where['rok_vzniku LIKE'] = $form->values->rok;
!is_null($form->values->typ) ? $where['typ_jednotky LIKE'] = $form->values->typ;
$this->template->jednotky = $this->ulozneJednotkyRepository->findByFirma($this->firma)
->where($where);