Ukládání entit pomocí NotORM
- czm4rty
- Člen | 29
Snažím alespoň zhruba dodržet model Entity-Repository-(Mapper). Měl bych otázku ke způsobu ukládání Entit. Napadly mě dva způsoby. První spočívá v napsání metody save() pro repositář každé entity zvlášť.
Article.php
class Article {
private $id;
private $title;
public function getTitle() {
return $this->title;
}
public function setTitle($title) {
$this->title = $title;
}
...
}
ArticleRepository.php
function save() {
$this->database->article()->insert(array(
'id' => $this->id,
'title' => $this->title
));
}
Což je tedy hodně psaní. V druhé způsobu (nevím jestli úplně správný) vložím nad každou properties v entitě anotaci @Column, které následně v repozitáři vytáhnu a uložím.
Repository.php
function save($entity) {
$ref = new \Nette\Reflection\ClassType($entity);
$properties = $ref->getProperties();
$vals = array();
foreach($properties as $item) {
if($item->hasAnnotation('Column')) {
$vals[$item->name] = $entity->{$item->name};
}
}
return $this->database->article()->insert($vals);
}
- Je druhů způsob použitelný?
- Mám vložený záznam vracet jako objekt Article (tedy nastavit všechny properties ve třídě Article a tu poté vrátit)?
- Při získávání záznam z databáze v presenteru ($articleRepository->find($id)) mám opět vytvořit objekt Article a ten poté vrátit?
Předem díky za pomoc
- Nox
- Člen | 378
Je možné postavit ORM nad NotORM … stejně jako by šlo nad PDO, dibi nebo čímkoli jiným.
Psát zvláštní Repository pro každý typ entity by se mi teda nechtělo, zvlášť, když budou defakto stejné … na druhou stranu se pak musí psát ty column. Nebo nemusí, šlo by třeba mít implements MyEntity, a mít nějakou funkci jako getPersitedColumns, podobně jako je filosofie metody sleep: http://cz2.php.net/…p5.magic.php#…