diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 81dad32bb..bb8bffd95 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -778,14 +778,13 @@ final class PersistentCollection implements Collection */ public function __clone() { - $this->initialize(); - - $this->owner = null; - if (is_object($this->coll)) { $this->coll = clone $this->coll; } + $this->initialize(); + + $this->owner = null; $this->snapshot = array(); $this->changed(); diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php new file mode 100644 index 000000000..2125966fc --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php @@ -0,0 +1,98 @@ +_schemaTool->createSchema(array( + $this->_em->getClassMetadata(__NAMESPACE__ . '\PersistentCollectionHolder'), + $this->_em->getClassMetadata(__NAMESPACE__ . '\PersistentCollectionContent'), + )); + } catch (\Exception $e) { + + } + PersistentObject::setObjectManager($this->_em); + } + + public function testPersist() + { + $collectionHolder = new PersistentCollectionHolder(); + $content = new PersistentCollectionContent('first element'); + $collectionHolder->addElement($content); + + $this->_em->persist($collectionHolder); + $this->_em->flush(); + $this->_em->clear(); + + $collectionHolder = $this->_em->find(__NAMESPACE__ . '\PersistentCollectionHolder', $collectionHolder->getId()); + $collectionHolder->getCollection(); + + $content = new PersistentCollectionContent('second element'); + $collectionHolder->addElement($content); + + $this->assertEquals(2, $collectionHolder->getCollection()->count()); + } + +} + +/** + * @Entity + */ +class PersistentCollectionHolder extends PersistentObject +{ + /** + * @Id @Column(type="integer") @GeneratedValue + * @var int + */ + protected $id; + + /** + * @var \Doctrine\Common\Collections\Collection + * @ManyToMany(targetEntity="PersistentCollectionContent", cascade={"all"}) + */ + protected $collection; + + public function __construct() + { + $this->collection = new \Doctrine\Common\Collections\ArrayCollection(); + } + + /** + * @param PersistentCollectionContent $element + */ + public function addElement(PersistentCollectionContent $element) + { + $this->collection->add($element); + } + + /** + * @return \Doctrine\Common\Collections\Collection + */ + public function getCollection() + { + return clone $this->collection; + } + +} + +/** + * @Entity + */ +class PersistentCollectionContent extends PersistentObject +{ + + /** + * @Id @Column(type="integer") @GeneratedValue + * @var int + */ + protected $id; + +}