Formulování dotazu s WHERE LIKE (array)
- dj.kure
- Člen | 70
Ahoj,
mám tu další specialitku, jak nejjednodušeji vyřešit filtrování výsledků z parametrů převzatých z url řádku (get)?
Tento SQL dotaz:
$this->database->table('zakaznici')->where(array_filter($this->getHttpRequest()->getQuery()));
Funguje skvěle, ale já bych místo WHERE x = y
potřeboval
WHERE x LIKE '%y%'
, jenže nevím, jak to naformulovat, protože mu
předávám pole a nechce se mi vyloženě vyjmenovávat každou možnou
položku, pokud by se to filtrování ještě časem rozrostlo na další.
Ten HttpRequest může obsahovat až pět položek (jméno, příjmení, ulice, město, psč).
Děkuji za případné nakopnutí.
P.S.: array_filter()
tam mám kvůli odstranění prázdných
položek (nevyplněných).
- ViPEr*CZ*
- Člen | 822
A co Vám to dělá, když si URL upravíte ručně a do GET dáte
neexistující sloupec databáze? Osobně ty parametry prostě validuju. Je to
prostě obdobný jak u formuláře, když přidám políčko, tak se mi
zvětší data v getValues, ale nedostane se mi tam nic jinýho. A stejně pak
pokud se nechci spolehnout, že prvky formu mají stejné indexy jako jména
sloupců v DB, tak musím nějak použít novou hodnotu.
Třeba má někdo univerzálnější a spolehlivější řešení. Tak ho taky
uvítám.
- dj.kure
- Člen | 70
Já Vám rozumím, tohle bylo jen takové ulehčení, protože vím, že to
dělám pro lidi, kteří jsou rádi za to, že kliknou na tlačítko, nebo
něco vyplní do inputu, ale určitě se nezajímají o dění v adresním
řádku.
Asi to tedy udělám jak navrhujete (tj. rozparsovat si GET a SQL dotaz si
z něj seskládat).
Nemůžete mi někdo prosím poradit jak? Nenapadá mne žádné jednoduché řešení.
Editoval dj.kure (2. 2. 2016 22:02)
- dj.kure
- Člen | 70
Díky, tohle řešení je dobré :-)
Zde doplňuji mé upravené řešení, které mi funguje:
$keys = array (
'jmeno' => $this->getHttpRequest()->getQuery('jmeno'),
'prijmeni' => $this->getHttpRequest()->getQuery('prijmeni'),
'ulice' => $this->getHttpRequest()->getQuery('ulice'),
'mesto' => $this->getHttpRequest()->getQuery('mesto'),
);
$selection->where($dbKey . ' LIKE ?', "%" . ucfirst($keys[$dbKey]) . "%");
Potřeboval jsem mít možnost zadávat do formuláře i malá písmenka
(proto ucfirst()
), a do dotazu s „LIKE“ jsem doplnil
procenta.
- petr.jirous
- Člen | 128
@dj.kure
$keys = array ( 'jmeno' => $this->getHttpRequest()->getQuery('jmeno'), 'prijmeni' => $this->getHttpRequest()->getQuery('prijmeni'), 'ulice' => $this->getHttpRequest()->getQuery('ulice'), 'mesto' => $this->getHttpRequest()->getQuery('mesto'), );
tohle můžeš nahradit za
$keys = $this->getHttpRequest()->getQuery();
Nicméně nechápu o co se snažíš? Vypadá to jako filtrování nějaké tabulky, tzn. předpokládám, že pomocí formuláře, kde se vyplňuje jmeno, ulice, prijmeni a mesto. Tak proč si ty hodnoty taháš z URL, když si je můžeš tahat z formuláře?
Editoval petr.jirous (5. 2. 2016 23:02)