Second level cache stores identifier with correct type even if findById is called with wrong identifier type
This commit is contained in:
parent
71bb27a62f
commit
91ce78815f
@ -73,7 +73,7 @@ class DefaultEntityHydrator implements EntityHydrator
|
|||||||
public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $entity)
|
public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $entity)
|
||||||
{
|
{
|
||||||
$data = $this->uow->getOriginalEntityData($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) {
|
foreach ($metadata->associationMappings as $name => $assoc) {
|
||||||
if ( ! isset($data[$name])) {
|
if ( ! isset($data[$name])) {
|
||||||
|
@ -119,7 +119,7 @@ class DefaultEntityHydratorTest extends OrmTestCase
|
|||||||
$this->assertArrayHasKey('name', $cache->data);
|
$this->assertArrayHasKey('name', $cache->data);
|
||||||
$this->assertArrayHasKey('country', $cache->data);
|
$this->assertArrayHasKey('country', $cache->data);
|
||||||
$this->assertEquals(array(
|
$this->assertEquals(array(
|
||||||
'id' => 11,
|
'id' => 12,
|
||||||
'name' => 'Bar',
|
'name' => 'Bar',
|
||||||
'country' => new AssociationCacheEntry(Country::CLASSNAME, array('id' => 11)),
|
'country' => new AssociationCacheEntry(Country::CLASSNAME, array('id' => 11)),
|
||||||
), $cache->data);
|
), $cache->data);
|
||||||
@ -147,9 +147,39 @@ class DefaultEntityHydratorTest extends OrmTestCase
|
|||||||
$this->assertArrayHasKey('name', $cache->data);
|
$this->assertArrayHasKey('name', $cache->data);
|
||||||
$this->assertArrayHasKey('country', $cache->data);
|
$this->assertArrayHasKey('country', $cache->data);
|
||||||
$this->assertEquals(array(
|
$this->assertEquals(array(
|
||||||
'id' => 11,
|
'id' => 12,
|
||||||
'name' => 'Bar',
|
'name' => 'Bar',
|
||||||
'country' => new AssociationCacheEntry(Country::CLASSNAME, array('id' => 11)),
|
'country' => new AssociationCacheEntry(Country::CLASSNAME, array('id' => 11)),
|
||||||
), $cache->data);
|
), $cache->data);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user