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

Database Request

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

Request

A request egy egyszerűsítő API-t kínál az Access réteg fölé, ahol már nem írunk kézzel SQL-eket. Talán egy példán keresztül értheted meg a legjobban a lényegét.

// létrehozzuk a requestet, ami megkapja a hozzáférést
$request = new Request($access);
$users = $request
	->select('*') // minden mezőt lekérdezünk
	->from('user') // a user táblából
	->where(Filter::where('age>$1',18)) // aki idősebb, mint 18
	->asc('name') // név szerint sorbarendezve
	->collect(10,50); // 10 darabot kérünk az 50.-től
SELECT * FROM `user` WHERE age>'18' ORDER BY `name` ASC LIMIT 10 OFFSET 50

Konstruktor

__construct(Access $access, \Closure $converter = null)

A konstruktorban meg kell adnod a kapcsolatot ($access), amit a Request használni fog. Opcionális paraméterként megadhatsz egy függvényt ($converter), ami konvertálja a visszakapott értékeket. Bonyolultnak tünhet a konstruktor szignatúra, de Phlexben a Request objektumokat a legtöbb esetben már készen, felparaméterezve fogod megkapni.

Konverter

setConverter(\Closure $converter = null):Request

Megadhatsz egy konvertert a Requestedhez. Ha null paramétert adsz át, akkor törlöd a konvertert. A konverter feladata, hogy módosítson minden egyes sort, amit a requested visszaad. Például az alábbi konvertert megadva MyClass objektumokat kapsz vissza a lekérdezésed végén, amik a rekordokkal lesznek példányosítva.

$request->setConverter(
	function ($record){
		return new MyClass($record);
	}
);

Asszociatív lekérdezés

key(string $key):Request

Amennyiben a lekérdezés egyik oszlopát szeretnéd, hogy a kulcsa legyen a visszakapott rekordok tömbjének, akkor azt ebben a metódusban adhatod meg.

SELECT ?

select(string $sql, ...$sqlParams):Request

Itt adhatod meg, hogy mely mezőket szeretnéd lekérdezni.

FROM ?

from(string $sql, ...$sqlParams):Request

Itt adhatod meg, hogy honnan történjen a lekérdezés, tipikusan egy tábla nevével szoktuk paraméterezni.

WHERE ?

where(Filter $filter = null):Request

Itt megadhatsz egy filtert, ami a keresési feltételeket tartalmazza.

ORDER BY ?

asc($field):Request
desc($field):Request

Növekvő és csökkenő rendezés a megadott mező alapján.


ascIf($condition, $field):Request
descIf($condition, $field):Request

Amennyiben a $condition értéke igaz, akkor fűzi csak hozzá a sorbarendezést.


order($order):Request
orderIf($condition, $order):Request

Az order és az orderIf közötti különbség pont annyi, mint pár sorral feljebb, mondjuk az and és az andIf között. Az $order argumentum viszont érdekesebb, ugyanis ez két tipusú paramétert fogadhat:

  • string esetében a megadott stringet írja az "ORDER BY" mögé
  • tömb esetében viszont egy rendezési rendszert is megadhatsz. A tömb kulcsai a mezők, az értékük ASC és DESC lehet a rendezés irányától függően.

Az fenti sorrendezést szabályozó metódusokat meghívva azok egymásra épülnek. Az alábbi példa bemutatja:

$request->desc('height')->asc('age')->asc('name');
... ORDER BY `height` DESC,`age` ASC, `name` ASC ...

SQL

getSql():string

Visszaadja az SQL-t, amit a request objektum reprezentál.

Lekérdezések

`count():int``

Egyszerűsíti a lekérdezésed és csak az annak megfelelő sorok számával tér vissza.


pick()

Egyetlen egy sor lekérdezése. Ha nincs találat, akkor null-al tér vissza.


`collect($limit=null, $offset=null)``

Több sor lekérdezése. Megadhatdo, hogy hány sort és milyen offsettel szeretnél lekérdezni. Ha nincs találat, akkor egy üres tömbbel tér vissza.


collectPage($pageSize, $page, &$count)

Ha lapozásos lekérdezést szeretnél használni, ezt a metódust kell használnod. Megadhatod, hogy hány elemet szeretnél látni egy lapon, hányadik lapot szeretnéd lekérdezni és egy cím szerint átvett változóba azt is visszakapod, hogy hány elem van összesen, hogy a lapozó interface-edet könnyen fel tudd építeni.


collectData($limit = null, $offset = null)
collectPageData($pageSize, $page, &$count)

Ez a két metódus nagyon hasonlít a fenti collect, collectPage metódusokra. Igazából a motorháztető alatt a fentiek is ezeket használják a lekérdezéshez - azzal a különbséggel, hogy ezek nem használják a megadott konvertert.

Clone this wiki locally