-
Notifications
You must be signed in to change notification settings - Fork 0
RedFox Repository
A repository az az objektum, akinek a felelőssége az entitások adatbázisból való betöltése, azok mentése és adott esetben törlése. Ugyan az entitásnál is találkozhattál save és delete metódusokkal, azok nem mások, mint rövidítések, és az entitás is a repository-t szólítja meg és kéri meg a feladatok elvégzésére.
A repository-t kényelmi és praktikus okokból mindíg az entitás egy statikus hívásán keresztül ejtheted meg. Ennek okai:
- Kényelmesebb :)
- Egyféle repository-ból egy példányt kapsz mindig
- Az egy példány azért nagyon fontos, mert a repositoryban van egy entitás cache, ami drasztikus mértékben csökkentheti az adatbázishoz fordulások számát.
$repo = User::repository();Ugyan te nem fogod kézzel a repositoryt soha, viszont rendelkezik publikus konstruktorral. Argumentumai egy DataSource objektum, ami definiálja az adatforrást, illetve egy Entitás osztály (pl.: "User"). Ez utóbbi azért kell, hogy a repository tudja, hogy milyen entitás példányokat kell gyártania.
A repository visszaad egyetlen egy entitást. Amennyiben a $strict argumentum értéke true és nem találja a megadott azonosító alapján a rekodot, egy RepositoryException-t fog dobni!
Összegyűjti az entitásokat a megadott id lista alapján. Amennyiben a $strict argumentum értéke true és a találati lista mérete nem egyezik a paraméterként kapott id listának a méretével, egy RepositoryException-t fog dobni!
Egy előre felparaméterezett Database Request objektummal tér vissza, neked már csak a szűréseket és a sorrendet kell beálítanod, majd lekérdezni az eredményt. A request természetesen kap egy konvertert, ami a megfelelő osztályú entitásokká konvertálja az adatsorokat, elkéri az összes mezőt (*) az entitáshoz tartozó táblából.
class UserRepository extends Repository{
public function getActiveUsers(){
return $this->search("status=$1", "active")->collect();
}
}Az alábbi metódusokat inkább a rendszer hívja, neked valószínüleg semmi doglod nem lesz velük. Persze soha nem mondd, hogy soha, léteznek a rendelkezésedre állnak!
A fenti metódusokat hívja az entitás maga, ha az ő saját save vagy delete metódusát hívod meg. Mivel tudja, hogy elmentett állapotban van e, ezért ő dönt, hogy a repository insert vagy update metódusát hívja mentéskor.
Visszaadja az repository adatforrását.
Amennyiben az átadott elem értéke null, vagy üres tömb egy RepositoryException-t dob.
Fontos, hogy mindig legyenek elvárásaid az alkalmazásoddal szemben! Mi azt gondoltuk, hogyha a repository-d pick metódusa nem ad vissza semmilyen eredményt, akkor baj van, hiszen direkt módon szólítottad meg egy adatbázis rekodot úgy, hogy ismerted a hozzá tartozó azonosítót. Ugyanezt alkalmazzuk a collect metódus esetén is.
Amennyiben elvárásod lehet az adatbázissal szemben az alkalmazásodban dobáld te is bátran a kivételeket!