-
Notifications
You must be signed in to change notification settings - Fork 0
Database 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őlSELECT * FROM `user` WHERE age>'18' ORDER BY `name` ASC LIMIT 10 OFFSET 50A 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.
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);
}
);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.
Itt adhatod meg, hogy mely mezőket szeretnéd lekérdezni.
Itt adhatod meg, hogy honnan történjen a lekérdezés, tipikusan egy tábla nevével szoktuk paraméterezni.
Itt megadhatsz egy filtert, ami a keresési feltételeket tartalmazza.
Növekvő és csökkenő rendezés a megadott mező alapján.
Amennyiben a $condition értéke igaz, akkor fűzi csak hozzá a sorbarendezést.
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 ...Visszaadja az SQL-t, amit a request objektum reprezentál.
Egyszerűsíti a lekérdezésed és csak az annak megfelelő sorok számával tér vissza.
Egyetlen egy sor lekérdezése. Ha nincs találat, akkor null-al tér vissza.
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.
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.
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.