diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index b5fc84219..9ecb18e92 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -73,7 +73,7 @@ class DefaultEntityHydrator implements EntityHydrator public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $entity) { $data = $this->uow->getOriginalEntityData($entity); - $data = array_merge($data, $key->identifier); // why update has no identifier values ? + $data = array_merge($data, $metadata->getIdentifierValues($entity)); // why update has no identifier values ? foreach ($metadata->associationMappings as $name => $assoc) { if ( ! isset($data[$name])) { diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php index d81cade87..73878ee46 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php @@ -119,7 +119,7 @@ class DefaultEntityHydratorTest extends OrmTestCase $this->assertArrayHasKey('name', $cache->data); $this->assertArrayHasKey('country', $cache->data); $this->assertEquals(array( - 'id' => 11, + 'id' => 12, 'name' => 'Bar', 'country' => new AssociationCacheEntry(Country::CLASSNAME, array('id' => 11)), ), $cache->data); @@ -147,9 +147,39 @@ class DefaultEntityHydratorTest extends OrmTestCase $this->assertArrayHasKey('name', $cache->data); $this->assertArrayHasKey('country', $cache->data); $this->assertEquals(array( - 'id' => 11, + 'id' => 12, 'name' => 'Bar', 'country' => new AssociationCacheEntry(Country::CLASSNAME, array('id' => 11)), ), $cache->data); } -} \ No newline at end of file + + public function testCacheEntryWithWrongIdentifierType() + { + $proxy = $this->em->getReference(Country::CLASSNAME, 11); + $entity = new State('Bat', $proxy); + $uow = $this->em->getUnitOfWork(); + $entityData = array('id'=> 12, 'name'=>'Bar', 'country' => $proxy); + $metadata = $this->em->getClassMetadata(State::CLASSNAME); + $key = new EntityCacheKey($metadata->name, array('id'=>'12')); + + $entity->setId(12); + + $uow->registerManaged($entity, array('id'=>12), $entityData); + + $cache = $this->structure->buildCacheEntry($metadata, $key, $entity); + + $this->assertInstanceOf('Doctrine\ORM\Cache\CacheEntry', $cache); + $this->assertInstanceOf('Doctrine\ORM\Cache\EntityCacheEntry', $cache); + + $this->assertArrayHasKey('id', $cache->data); + $this->assertArrayHasKey('name', $cache->data); + $this->assertArrayHasKey('country', $cache->data); + $this->assertSame($entity->getId(), $cache->data['id']); + $this->assertEquals(array( + 'id' => 12, + 'name' => 'Bar', + 'country' => new AssociationCacheEntry(Country::CLASSNAME, array('id' => 11)), + ), $cache->data); + } + +}