commit
c02ac6516e
@ -389,6 +389,7 @@ final class PersistentCollection implements Collection
|
||||
|
||||
if ($this->association !== null &&
|
||||
$this->association['type'] & ClassMetadata::TO_MANY &&
|
||||
$this->owner &&
|
||||
$this->association['orphanRemoval']) {
|
||||
$this->em->getUnitOfWork()->scheduleOrphanRemoval($removed);
|
||||
}
|
||||
@ -427,6 +428,7 @@ final class PersistentCollection implements Collection
|
||||
|
||||
if ($this->association !== null &&
|
||||
$this->association['type'] & ClassMetadata::TO_MANY &&
|
||||
$this->owner &&
|
||||
$this->association['orphanRemoval']) {
|
||||
$this->em->getUnitOfWork()->scheduleOrphanRemoval($element);
|
||||
}
|
||||
@ -631,7 +633,9 @@ final class PersistentCollection implements Collection
|
||||
|
||||
$uow = $this->em->getUnitOfWork();
|
||||
|
||||
if ($this->association['type'] & ClassMetadata::TO_MANY && $this->association['orphanRemoval']) {
|
||||
if ($this->association['type'] & ClassMetadata::TO_MANY &&
|
||||
$this->association['orphanRemoval'] &&
|
||||
$this->owner) {
|
||||
// we need to initialize here, as orphan removal acts like implicit cascadeRemove,
|
||||
// hence for event listeners we need the objects in memory.
|
||||
$this->initialize();
|
||||
@ -783,7 +787,7 @@ final class PersistentCollection implements Collection
|
||||
}
|
||||
|
||||
$this->snapshot = array();
|
||||
|
||||
|
||||
$this->changed();
|
||||
}
|
||||
}
|
||||
|
74
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php
Normal file
74
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php
Normal file
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Tests\Models\CMS\CmsUser;
|
||||
use Doctrine\Tests\Models\CMS\CmsPhonenumber;
|
||||
|
||||
/**
|
||||
* @group DDC-1778
|
||||
*/
|
||||
class DDC1778Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
private $user;
|
||||
private $phone;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$this->useModelSet('cms');
|
||||
parent::setUp();
|
||||
|
||||
$this->user = new CmsUser();
|
||||
$this->user->username = "beberlei";
|
||||
$this->user->name = "Benjamin";
|
||||
$this->user->status = "active";
|
||||
|
||||
$this->phone = new CmsPhoneNumber();
|
||||
$this->phone->phonenumber = '0123456789';
|
||||
$this->user->addPhoneNumber($this->phone);
|
||||
|
||||
$this->_em->persist($this->user);
|
||||
$this->_em->persist($this->phone);
|
||||
$this->_em->flush();
|
||||
$this->_em->clear();
|
||||
|
||||
$this->user = $this->_em->find('Doctrine\\Tests\\Models\\CMS\\CmsUser', $this->user->getId());
|
||||
$this->phone = $this->_em->find('Doctrine\\Tests\\Models\\CMS\\CmsPhonenumber', $this->phone->phonenumber);
|
||||
}
|
||||
|
||||
public function testClear()
|
||||
{
|
||||
$clonedNumbers = clone $this->user->getPhonenumbers();
|
||||
$clonedNumbers->clear();
|
||||
$this->_em->flush();
|
||||
$this->_em->clear();
|
||||
|
||||
$this->user = $this->_em->find('Doctrine\\Tests\\Models\\CMS\\CmsUser', $this->user->getId());
|
||||
|
||||
$this->assertCount(1, $this->user->getPhonenumbers());
|
||||
}
|
||||
|
||||
public function testRemove()
|
||||
{
|
||||
$clonedNumbers = clone $this->user->getPhonenumbers();
|
||||
$clonedNumbers->remove(0);
|
||||
$this->_em->flush();
|
||||
$this->_em->clear();
|
||||
|
||||
$this->user = $this->_em->find('Doctrine\\Tests\\Models\\CMS\\CmsUser', $this->user->getId());
|
||||
|
||||
$this->assertCount(1, $this->user->getPhonenumbers());
|
||||
}
|
||||
|
||||
public function testRemoveElement()
|
||||
{
|
||||
$clonedNumbers = clone $this->user->getPhonenumbers();
|
||||
$clonedNumbers->removeElement($this->phone);
|
||||
$this->_em->flush();
|
||||
$this->_em->clear();
|
||||
|
||||
$this->user = $this->_em->find('Doctrine\\Tests\\Models\\CMS\\CmsUser', $this->user->getId());
|
||||
|
||||
$this->assertCount(1, $this->user->getPhonenumbers());
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user