Clone entities on delete to preserve ids

This commit is contained in:
nurikabe 2014-03-24 11:16:31 -04:00
parent 514e63f26f
commit 720917f609
2 changed files with 11 additions and 4 deletions

View file

@ -195,17 +195,20 @@ class Listener implements EventSubscriber
$this->scheduledForUpdate[] = $entity;
} else {
// Delete if no longer indexable
$this->scheduledForDeletion[] = $entity;
$this->scheduledForDeletion[] = clone $entity;
}
}
}
/**
* Delete objects preRemove instead of postRemove so that we have access to the id
*/
public function preRemove(EventArgs $eventArgs)
{
$entity = $eventArgs->getEntity();
if ($entity instanceof $this->objectClass) {
$this->scheduledForDeletion[] = $entity;
$this->scheduledForDeletion[] = clone $entity;
}
}

View file

@ -133,7 +133,9 @@ abstract class ListenerTest extends \PHPUnit_Framework_TestCase
$listener = $this->createListener($persister, get_class($entity), array());
$listener->preRemove($eventArgs);
$this->assertEquals($entity, current($listener->scheduledForDeletion));
$scheduledClone = current($listener->scheduledForDeletion);
$this->assertEquals($entity, $scheduledClone);
$this->assertNotSame($entity, $scheduledClone);
$persister->expects($this->once())
->method('deleteMany')
@ -164,7 +166,9 @@ abstract class ListenerTest extends \PHPUnit_Framework_TestCase
$listener = $this->createListener($persister, get_class($entity), array(), 'identifier');
$listener->preRemove($eventArgs);
$this->assertEquals($entity, current($listener->scheduledForDeletion));
$scheduledClone = current($listener->scheduledForDeletion);
$this->assertEquals($entity, $scheduledClone);
$this->assertNotSame($entity, $scheduledClone);
$persister->expects($this->once())
->method('deleteMany')