From a2461d6d5f2fd19a4e8dde6adee0822331764571 Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Wed, 11 Feb 2015 17:04:24 +0100 Subject: [PATCH] Use identifier flattener to retrevie entity identifiers --- .../ORM/Cache/DefaultEntityHydrator.php | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index a71d5dd89..887d67012 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -25,6 +25,7 @@ use Doctrine\Common\Util\ClassUtils; use Doctrine\ORM\Query; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Utility\IdentifierFlattener; /** * Default hydrator cache for entities @@ -44,6 +45,13 @@ class DefaultEntityHydrator implements EntityHydrator */ private $uow; + /** + * The IdentifierFlattener used for manipulating identifiers + * + * @var \Doctrine\ORM\Utility\IdentifierFlattener + */ + private $identifierFlattener; + /** * @var array */ @@ -56,6 +64,7 @@ class DefaultEntityHydrator implements EntityHydrator { $this->em = $em; $this->uow = $em->getUnitOfWork(); + $this->identifierFlattener = new IdentifierFlattener($em->getUnitOfWork(), $em->getMetadataFactory()); } /** @@ -73,14 +82,13 @@ class DefaultEntityHydrator implements EntityHydrator } if ( ! isset($assoc['cache']) || ! ($assoc['type'] & ClassMetadata::TO_ONE)) { - $associatedEntity = $data[$name]; + $targetClassMetadata = $this->em->getClassMetadata($assoc['targetEntity']); + + $associationIds = $this->identifierFlattener->flattenIdentifier($targetClassMetadata, $targetClassMetadata->getIdentifierValues($data[$name])); unset($data[$name]); - if ($this->uow->isInIdentityMap($associatedEntity)) { - $targetEntityMetadata = $this->em->getClassMetadata($assoc['targetEntity']); - foreach ($this->uow->getEntityIdentifier($associatedEntity) as $fieldName => $fieldValue) { - $data[$assoc['targetToSourceKeyColumns'][$targetEntityMetadata->getColumnName($fieldName)]] = $fieldValue; - } + foreach ($associationIds as $fieldName => $fieldValue) { + $data[$assoc['targetToSourceKeyColumns'][$targetClassMetadata->getColumnName($fieldName)]] = $fieldValue; } continue; }