diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index c1f3cf1b6..b5948149a 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -542,6 +542,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 4956e5648..df1a16867 100644 --- a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php @@ -107,4 +107,44 @@ class PersistentCollectionTest extends OrmTestCase $this->assertSame("dummy", $this->collection->get(2)); $this->assertSame(null, $this->collection->get(3)); } + + /** + * @group 6110 + */ + public function testRemovingElementsAlsoRemovesKeys() + { + $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())); + } + + /** + * @group 6110 + */ + public function testClearWillAlsoClearKeys() + { + $this->setUpPersistentCollection(); + + $this->collection->add('dummy'); + $this->collection->clear(); + $this->assertEquals([], array_keys($this->collection->toArray())); + } + + /** + * @group 6110 + */ + public function testClearWillAlsoResetKeyPositions() + { + $this->setUpPersistentCollection(); + + $this->collection->add('dummy'); + $this->collection->removeElement('dummy'); + $this->collection->clear(); + $this->collection->add('dummy'); + $this->assertEquals([0], array_keys($this->collection->toArray())); + } }