Skip to content
This repository was archived by the owner on Jul 8, 2020. It is now read-only.

Database Filter

Laborci Gergely edited this page Aug 10, 2017 · 3 revisions

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!

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.

$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.

$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' ...

Clone this wiki locally