/** * Add discriminator values to class MetaData when a content class is loaded * Occur on classcontent.include events. * * @param Event $event */ public function onInclude(Event $event) { $shortClassname = AbstractClassContent::getShortClassname($event->getTarget()); $fullClassname = AbstractClassContent::getFullClassname($event->getTarget()); foreach (class_parents($fullClassname) as $classname) { // @gvf todo container injection $this->serviceContainer->get('doctrine.orm.default_entity_manager')->getClassMetadata($classname)->addDiscriminatorMapClass($shortClassname, $fullClassname); if ('BackBee\\CoreDomain\\ClassContent\\AbstractClassContent' === $classname) { break; } } }
/** * @param Page $page * @param array $classnames * * @return AbstractContent */ public function getLastByMainnode(Page $page, $classnames = array()) { try { $q = $this->createQueryBuilder('c'); foreach ($classnames as $classname) { $q->orWhere('c INSTANCE OF ' . AbstractClassContent::getFullClassname($classname)); } $q->andWhere('c._mainnode = :node')->orderby('c._modified', 'desc')->setMaxResults(1)->setParameters(array('node' => $page)); $entity = $q->getQuery()->getSingleResult(); } catch (\Exception $e) { $entity = null; } return $entity; }