/** * {@inheritDoc} */ public function collect(MvcEvent $mvcEvent) { if (!$this->classMetadataFactory) { return; } /* @var $metadata \Doctrine\Common\Persistence\Mapping\ClassMetadata[] */ $metadata = $this->classMetadataFactory->getAllMetadata(); $this->classes = array(); foreach ($metadata as $class) { $this->classes[$class->getName()] = $class; } }
public function process(ClassMetadataFactory $factory, $data) { foreach ($factory->getAllMetadata() as $classMetadata) { $class = $classMetadata->getName(); $data['entities'][$class] = array('associations' => array(), 'fields' => array()); foreach ($classMetadata->fieldMappings as $name => $config) { $data['entities'][$class]['fields'][$name] = $config['type']; } // associations foreach ($classMetadata->getAssociationMappings() as $name => $mapping) { $field = $mapping['fieldName']; $targetEntity = $mapping['targetEntity']; $type = ''; switch ($mapping['type']) { case ClassMetadataInfo::ONE_TO_MANY: $type = 'one_to_many'; break; case ClassMetadataInfo::ONE_TO_ONE: $type = 'one_to_one'; break; case ClassMetadataInfo::MANY_TO_ONE: $type = 'many_to_one'; break; case ClassMetadataInfo::MANY_TO_MANY: $type = 'many_to_many'; break; default: throw new \RuntimeException('Unkown association type ' . $mapping['type']); } $label = $targetEntity; if ($type == 'one_to_many' || $type == 'many_to_many') { $label .= '[]'; } $data['entities'][$class]['associations'][$field] = $label; if ($mapping['sourceEntity'] === $mapping['targetEntity']) { continue; } $from = array($mapping['sourceEntity'], $field); $to = array($mapping['targetEntity'], '__class__'); foreach ($data['relations'] as $relation) { if ($relation['from'] === $from) { continue 2; } } $data['relations'][] = array('from' => $from, 'to' => $to, 'type' => $type); } } return $data; }
/** * Builds a Hierarchy of every entity in the Class metadata. * @param ClassMetadataFactory $metadataFactory * @return MetadataNode[] */ protected function buildHierarchy(ClassMetadataFactory $metadataFactory) { $this->hierarchy = array(); $stack = new SplStack(); foreach ($metadataFactory->getAllMetadata() as $metadata) { $stack->push($metadata->getName()); } while (!$stack->isEmpty()) { $meta = $metadataFactory->getMetadataFor($stack->pop()); $name = $meta->getName(); $node = $this->getNode($name); $parent = $meta->getReflectionClass()->getParentClass(); if ($parent != null && $metadataFactory->hasMetadataFor($parent->getName())) { $parentNode = $this->getNode($metadataFactory->getMetadataFor($parent->getName())->getName()); $node->setParent($parentNode); $parentNode->addChild($node); } } return $this->hierarchy; }
public function process(ClassMetadataFactory $factory, $data) { foreach ($factory->getAllMetadata() as $classMetadata) { $actual = $classMetadata->getName(); $current = $classMetadata->getReflectionClass(); while (false !== ($current = $current->getParentClass())) { $name = $current->getName(); if (isset($data['entities'][$name])) { $data['relations'][] = array('from' => array($actual, '__class__'), 'to' => array($name, '__class__'), 'type' => 'extends'); break; } } // Inherited properties foreach ($classMetadata->getReflectionProperties() as $property) { $class = $property->getDeclaringClass()->getName(); $name = $property->getName(); if ($class !== $actual && isset($data['entities'][$class]['fields'][$name])) { unset($data['entities'][$actual]['fields'][$name]); } } } return $data; }
/** * @inheritDoc */ public function getAllMetadata() { return $this->wrapped->getAllMetadata(); }