Em um artigo anterior foi apresentando como a herança pode ser implementada no Doctrine. Neste artigo vamos apresentar como os elementos da herança podem ser persistidos e recuperados do Banco de Dados.
Para exemplo didático vamos utilizar novamente o exemplo épico do filme Star Wars (Figura 1), onde existe uma relação de herança entre: DarthVader, Luke Skywalker e Leia Organa.
Figura 1: Exemplo didático de herança.
As classes que representam cada um dos elementos podem ser visualizadas no post anterior.
Para o conjunto de classes do exemplo vamos implementar uma classe DAO (Data Access Object) para interagir com o Banco de Dados. A seguir é apresentado o código da classe DAO:
Classe JediDAO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <?php class JediDAO { public static function add($object) { /**Obtendo o container contendo as operações básicas envolvendo o doctrine. */ $doctrine_container = \Zend_Registry::get('doctrine'); $em = $doctrine_container->getEntityManager(); if($object->getId()){ $object = $em->merge($object); }else{ $em->persist($object); } $em->flush(); return $object; } public static function get($id) { /**Obtendo o container contendo as operações básicas envolvendo o doctrine. */ $doctrine_container = \Zend_Registry::get('doctrine'); $em = $doctrine_container->getEntityManager(); $object = $em->getRepository('DarthVader')->find($id); return $object; } // function public static function listAll(){ /**Obtendo o container contendo as operações básicas envolvendo o doctrine. */ $doctrine_container = \Zend_Registry::get('doctrine'); $em = $doctrine_container->getEntityManager(); $query = $em->createQuery('select obj from DarthVader obj'); $object_list = $query->getResult(); return $object_list; } } // class |
Agora vamos testar os métodos implementados na classe DAO:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | <?php //Criando um objeto DarthVader $darth_1 = new DarthVader(); $darth_1->setAtributoAnakin(1); //Persistindo o objeto JediDAO::add($darth_1); // Criando um objeto Luke $luke_1 = new Luke(); $luke_1->setAtributoLuke(2); JediDAO::add($luke_1); //Criando um objeto Leia $leia_1 = new Leia(); $leia_1->setAtributoLeia(3); JediDAO::add($leia_1); // Recuperando o objeto de id = 2 $jedi_2 = JediDAO::get(2); /* var_dump em $jedi_2 retorna: object(Luke)[198] private 'atributo_luke' => int 2 private 'id' (DarthVader) => int 2 private 'atributo_anakin' (DarthVader) => null */ //Listando todos os objetos jedi's do Banco $lista_jedis = JediDAO::listAll(); /* var_dump em $lista_jedis retorna um array: array (size=3) 0 => object(DarthVader)[209] private 'id' => int 1 private 'atributo_anakin' => int 1 1 => object(Luke)[198] private 'atributo_luke' => int 2 private 'id' (DarthVader) => int 2 private 'atributo_anakin' (DarthVader) => null 2 => object(Leia)[208] private 'atributo_leia' => int 3 private 'id' (DarthVader) => int 3 private 'atributo_anakin' (DarthVader) => null */ |
Explicação simples e prática! Parabéns pela forma de explicar! mt bommmmm
ResponderExcluir