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

RedFox Repository

Laborci Gergely edited this page Aug 10, 2017 · 1 revision

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.

Példányosítás

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:

  1. Kényelmesebb :)
  2. Egyféle repository-ból egy példányt kapsz mindig
  3. 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();

Konstruktor

__construct(DataSource $dataSource, string $entityClass)

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.

Publikus metódusok

pick(int $id, bool $strict = true)

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!


collect(array $ids, bool $strict = true)

Ö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!


search(Filter $filter = null)

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!

insert(Entity $object)
update(Entity $object)
delete(Entity $object)

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.


getDataSource():DataSource

Visszaadja az repository adatforrását.

Védett (protected) metódusok

throwExceptionOnEmpty($items)

Amennyiben az átadott elem értéke null, vagy üres tömb egy RepositoryException-t dob.

RepositoryException

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!

Clone this wiki locally