# 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](Access.md) rétegből ismerős **SqlBuilder** szignatúráját használhatod! ## Példányosítás ##### `Filter::where($sql, ...$sqlParams)` ##### `Filter::whereIf($condition, $sql, ...$sqlParams)` 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. ```php $filter = Filter::where('id=$1', $id); ``` ## SQL lekérdezése ##### `getSql(Access $access)` 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!* ## További feltételek hozzáfűzése ##### `and($sql, ...$sqlParams)` ##### `or($sql, ...$sqlParams)` Az eddig megadott feltételekhez fűzi hozzá a további feltételeket **AND** vagy **OR** kapcsolattal. ##### `andIf($condition, $sql, ...$sqlParams)`` ##### `orIf($condition, $sql, ...$sqlParams)` 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. ## Komplex lekérdezések 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. ```php $filter = Filter::where('status=$1', 'active') ->and( Filter::where('(age>$1 AND age<$2)', 18, 99)->or('sex=$1', 'male') ); ``` ```sql ... 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! ```php $userFilter = $this->getActiveUserFilter()->and('age>18'); ``` ```sql ... WHERE status='active' AND age>'18' ... ```