-
Notifications
You must be signed in to change notification settings - Fork 0
Database Filter
A Filter egy nagyon hatékony eszköz az SQL WHERE szegmensének építéséhez. Összetett feltételrendszereket is egyszerűen és jól átláthatóan építhetsz a segítségével. A szűrési feltételek megadásához az Access rétegből ismerős SqlBuilder szignatúráját használhatod!
A példányosítás két statikus metóduson keresztül történhet, melyekben már megadhatsz egy-egy feltételt. Az első mindenképpen hozzáadja a paraméterül kapott feltételt, míg a második csak akkor, ha a $condition argumentum értéke igaz.
$filter = Filter::where('id=$1', $id);Visszaadja azt az SQL WHERE szegmenst, amit a Filter reprezentál. Át kell adj neki egy Access-t, ugyanis annak SqlBuilderét is használja. Ezt a metódust neked nem nagyon kell hívnod!
Az eddig megadott feltételekhez fűzi hozzá a további feltételeket AND vagy OR kapcsolattal.
A fentiekhez hasonló, de a feltétel csak akkor kerül hozzáfűzésre, ha a** $condition**-ban kapott kifejezés értéke igaz.
A fenti (and, or, andIf, orIf) a metódusok az $sql argumentumukban nem csak egy stringet vehetnek át, hanem egy újabb filtert is. Ezzel érheted el a "zárójelezett" feltételrendszert.
$filter = Filter::where('status=$1', 'active')
->and(
Filter::where('(age>$1 AND age<$2)', 18, 99)->or('sex=$1', 'male')
);... WHERE status='active' AND ((age>'18' AND age<'99') OR sex='male') ...A fenti példának ugyan sok értelme nincs, de talán értelmezhetővé teszi a filtereink működését.
Ami fontos még a filterekkel kapcsolatban, hogy a filter lehetővé teszi, hogy írj olyan metódusokat, melyek felparaméterezett szűrőkkel térnek vissza, amit a felhasználás helyén még tovább alakíthatsz, így csökkentve a kódismétlés veszélyét!
$userFilter = $this->getActiveUserFilter()->and('age>18');... WHERE status='active' AND age>'18' ...