f1 = $f1; $this->f2 = $f2; } } interface T1DatabaseAccess { public function get_one($f2); public function get_all(); public function put($o); public function remove($f1); } class T1DatabaseAccessDoctrine implements T1DatabaseAccess { private $em; public function __construct($conattr) { // connect to server, select database and setup mapping $mapping = Setup::createXMLMetadataConfiguration(array(__DIR__)); $this->em = EntityManager::create($conattr, $mapping); } public function get_one($f2) { // execute SQL statement $rsmap = new ResultSetMappingBuilder($this->em); $rsmap->addRootEntityFromClassMetadata('T1', 't1'); $q = $this->em->createNativeQuery('SELECT f1,f2 FROM t1 WHERE t1.f2=:f2', $rsmap); $q->setParameter('f2', $f2); $res = $q->getResult(); // return value if(count($res) > 0) { return $res[0]; } else { die("$f2 not found"); } } public function get_all() { // execute SQL statement $rsmap = new ResultSetMappingBuilder($this->em); $rsmap->addRootEntityFromClassMetadata('T1', 't1'); $q = $this->em->createNativeQuery('SELECT f1,f2 FROM t1', $rsmap); $res = $q->getResult(); // return collection with rows return $res; } public function put($o) { // persist and flush $this->em->persist($o); $this->em->flush(); } public function remove($f1) { // find, remove and flush $entity = $this->em->find('T1', $f1); $this->em->remove($entity); $this->em->flush(); } } class T1DatabaseAccessFactory { const DOCTRINE = 'DOCTRINE'; public static function get_database_access($id, $conattr) { if($id === T1DatabaseAccessFactory::DOCTRINE) { return new T1DatabaseAccessDoctrine($conattr); } else { throw new Exception("Unknown T1DatabaseAccess id: $id"); } } } interface T1Presenter { public function display($data); } class T1PresenterHtmlTable implements T1Presenter { public function display($data) { $rows = ""; foreach($data as $row) { $f1 = $row->f1; $f2 = $row->f2; $rows .= sprintf("\r\n$f1\r\n$f2\r\n\r\n"); } return "\r\n\r\n\r\n\r\n\r\n$rows
F1F2
\r\n"; } } class T1PresenterFactory { const HTML_TABLE = 'HTML Table'; public static function get_presenter($id) { if($id === T1PresenterFactory::HTML_TABLE) { return new T1PresenterHtmlTable() ; } else { throw new Exception("Unknown T1Presenter id: $id"); } } } function test() { $data_access = T1DatabaseAccessFactory::get_database_access(T1DatabaseAccessFactory::DOCTRINE, array('driver' => 'pdo_mysql', 'host' => 'localhost', 'dbname' => 'Test', 'user' => 'root', 'password' => '')); $presenter = T1PresenterFactory::get_presenter(T1PresenterFactory::HTML_TABLE); $f1 = $data_access->get_one('BB')->f1; echo "$f1
\r\n"; $data = $data_access->get_all(); echo $presenter->display($data); $data_access->put(new T1(999, 'XXX')); $data = $data_access->get_all(); echo $presenter->display($data); $data_access->remove(999); $data = $data_access->get_all(); echo $presenter->display($data); } test(); ?>