[DDC-1835] Fix cloning persistent collections.
This commit is contained in:
parent
9ae5b8f442
commit
bcddc47356
@ -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();
|
||||
|
@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional;
|
||||
|
||||
use Doctrine\Common\Persistence\PersistentObject;
|
||||
|
||||
/**
|
||||
*/
|
||||
class PersistentCollectionTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
try {
|
||||
$this->_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;
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user