Clone entities on delete to preserve ids
This commit is contained in:
parent
514e63f26f
commit
720917f609
|
@ -195,17 +195,20 @@ class Listener implements EventSubscriber
|
||||||
$this->scheduledForUpdate[] = $entity;
|
$this->scheduledForUpdate[] = $entity;
|
||||||
} else {
|
} else {
|
||||||
// Delete if no longer indexable
|
// 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)
|
public function preRemove(EventArgs $eventArgs)
|
||||||
{
|
{
|
||||||
$entity = $eventArgs->getEntity();
|
$entity = $eventArgs->getEntity();
|
||||||
|
|
||||||
if ($entity instanceof $this->objectClass) {
|
if ($entity instanceof $this->objectClass) {
|
||||||
$this->scheduledForDeletion[] = $entity;
|
$this->scheduledForDeletion[] = clone $entity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -133,7 +133,9 @@ abstract class ListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
$listener = $this->createListener($persister, get_class($entity), array());
|
$listener = $this->createListener($persister, get_class($entity), array());
|
||||||
$listener->preRemove($eventArgs);
|
$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())
|
$persister->expects($this->once())
|
||||||
->method('deleteMany')
|
->method('deleteMany')
|
||||||
|
@ -164,7 +166,9 @@ abstract class ListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
$listener = $this->createListener($persister, get_class($entity), array(), 'identifier');
|
$listener = $this->createListener($persister, get_class($entity), array(), 'identifier');
|
||||||
$listener->preRemove($eventArgs);
|
$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())
|
$persister->expects($this->once())
|
||||||
->method('deleteMany')
|
->method('deleteMany')
|
||||||
|
|
Loading…
Reference in a new issue