diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index 144fe8257..5fe4fa1e5 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -396,21 +396,12 @@ abstract class AbstractHydrator // the current discriminator value must be saved in order to disambiguate fields hydration, // should there be field name collisions if ($classMetadata->parentClasses && isset($this->_rsm->discriminatorColumns[$ownerMap])) { - $discriminatorValues = array_map( - function (string $subClass) : string { - return (string) $this->getClassMetadata($subClass)->discriminatorValue; - }, - $classMetadata->subClasses - ); - - $discriminatorValues[] = (string) $classMetadata->discriminatorValue; - return $this->_cache[$key] = \array_merge( $columnInfo, [ 'discriminatorColumn' => $this->_rsm->discriminatorColumns[$ownerMap], 'discriminatorValue' => $classMetadata->discriminatorValue, - 'discriminatorValues' => $discriminatorValues, + 'discriminatorValues' => $this->getDiscriminatorValues($classMetadata), ] ); } @@ -463,6 +454,23 @@ abstract class AbstractHydrator return null; } + /** + * @return string[] + */ + private function getDiscriminatorValues(ClassMetadata $classMetadata) : array + { + $values = array_map( + function (string $subClass) : string { + return (string) $this->getClassMetadata($subClass)->discriminatorValue; + }, + $classMetadata->subClasses + ); + + $values[] = (string) $classMetadata->discriminatorValue; + + return $values; + } + /** * Retrieve ClassMetadata associated to entity class name. *