From 786c34faa5b664e5c31e3ce04c432a81b881fe03 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Thu, 15 Jan 2015 03:04:56 +0100 Subject: [PATCH] #1130 DDC-3300 - refactoring auto-remapping of discriminator value into a private method --- .../ORM/Mapping/ClassMetadataFactory.php | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 7dcbe1e48..a6ad18832 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -79,18 +79,7 @@ class ClassMetadataFactory extends AbstractClassMetadataFactory /* @var $loaded string[] */ $loaded = parent::loadMetadata($name); - foreach ($loaded as $className) { - /* @var $metadata ClassMetadata */ - $metadata = $this->getMetadataFor($className); - - if (! $metadata->discriminatorValue) { - foreach ($metadata->discriminatorMap as $discriminatorValue => $discriminatorClass) { - if ($metadata->name === $this->getMetadataFor($discriminatorClass)->getName()) { - $metadata->discriminatorValue = $discriminatorValue; - } - } - } - } + array_map([$this, 'populateDiscriminatorValue'], array_map([$this, 'getMetadataFor'], $loaded)); return $loaded; } @@ -313,6 +302,29 @@ class ClassMetadataFactory extends AbstractClassMetadataFactory return new ClassMetadata($className, $this->em->getConfiguration()->getNamingStrategy()); } + /** + * Populates the discriminator value of the given metadata (if not set) by iterating over discriminator + * map classes and looking for a fitting one. + * + * @param ClassMetadata $metadata + * + * @throws MappingException + */ + private function populateDiscriminatorValue(ClassMetadata $metadata) + { + if (! $metadata->discriminatorValue && $metadata->discriminatorMap) { + foreach ($metadata->discriminatorMap as $discriminatorValue => $discriminatorClass) { + if ($metadata->name === $this->getMetadataFor($discriminatorClass)->getName()) { + $metadata->discriminatorValue = $discriminatorValue; + + break; + } + } + + //throw MappingException::mappedClassNotPartOfDiscriminatorMap($metadata->name, $metadata->rootEntityName); + } + } + /** * Adds a default discriminator map if no one is given *