diff --git a/Doctrine/Listener.php b/Doctrine/Listener.php index c254513..43ac744 100644 --- a/Doctrine/Listener.php +++ b/Doctrine/Listener.php @@ -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; } } diff --git a/Tests/Doctrine/AbstractListenerTest.php b/Tests/Doctrine/AbstractListenerTest.php index a9eff66..8e49f24 100644 --- a/Tests/Doctrine/AbstractListenerTest.php +++ b/Tests/Doctrine/AbstractListenerTest.php @@ -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')