From 3dadfa49d5fb4e2e3866eaa535d63a6ac44d8e4e Mon Sep 17 00:00:00 2001 From: Steevan BARBOYON Date: Mon, 31 Oct 2016 12:03:19 +0100 Subject: [PATCH] Clear $this->collection even when empty, to reset indexes --- lib/Doctrine/ORM/PersistentCollection.php | 2 ++ .../Tests/ORM/PersistentCollectionTest.php | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 83eab8cf1..c2e11dfbe 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -536,6 +536,8 @@ final class PersistentCollection extends AbstractLazyCollection implements Selec public function clear() { if ($this->initialized && $this->isEmpty()) { + $this->collection->clear(); + return; } diff --git a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php index e77f898d1..757483a97 100644 --- a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php @@ -83,4 +83,29 @@ class PersistentCollectionTest extends OrmTestCase $this->collection->next(); $this->assertTrue($this->collection->isInitialized()); } + + /** + * Test that PersistentCollection::clear() clear elements, and reset keys + */ + public function testClear() + { + $this->setUpPersistentCollection(); + + $this->collection->add('dummy'); + $this->assertEquals([0], array_keys($this->collection->toArray())); + + $this->collection->removeElement('dummy'); + $this->assertEquals([], array_keys($this->collection->toArray())); + + $this->collection->add('dummy'); + $this->collection->clear(); + $this->assertEquals([], array_keys($this->collection->toArray())); + + // test fix clear doesn't reset collection keys when collection is empty + $this->collection->add('dummy'); + $this->collection->removeElement('dummy'); + $this->collection->clear(); + $this->collection->add('dummy'); + $this->assertEquals([0], array_keys($this->collection->toArray())); + } }