Permalink
Browse files

Merge branch 'DDC-1496'

  • Loading branch information...
2 parents 61e371c + ceadc95 commit ef0a901cf587cb25836df67f8e066c9c6543c70e @beberlei beberlei committed Nov 18, 2011
@@ -567,6 +567,9 @@ public function clear()
return;
}
if ($this->association['type'] == ClassMetadata::ONE_TO_MANY && $this->association['orphanRemoval']) {
+ // we need to initialize here, as orphan removal acts like implicit cascadeRemove,
+ // hence for event listeners we need the objects in memory.
+ $this->initialize();
foreach ($this->coll as $element) {
$this->em->getUnitOfWork()->scheduleOrphanRemoval($element);
}
@@ -13,46 +13,63 @@
*/
class OneToManyOrphanRemovalTest extends \Doctrine\Tests\OrmFunctionalTestCase
{
+ protected $userId;
+
protected function setUp()
{
$this->useModelSet('cms');
-
+
parent::setUp();
- }
-
- public function testOrphanRemoval()
- {
+
$user = new CmsUser;
$user->status = 'dev';
$user->username = 'romanb';
$user->name = 'Roman B.';
-
+
$phone = new CmsPhonenumber;
$phone->phonenumber = '123456';
-
+
$user->addPhonenumber($phone);
-
+
$this->_em->persist($user);
$this->_em->flush();
-
- $userId = $user->getId();
-
+
+ $this->userId = $user->getId();
$this->_em->clear();
-
- $userProxy = $this->_em->getReference('Doctrine\Tests\Models\CMS\CmsUser', $userId);
-
+ }
+
+ public function testOrphanRemoval()
+ {
+ $userProxy = $this->_em->getReference('Doctrine\Tests\Models\CMS\CmsUser', $this->userId);
+
$this->_em->remove($userProxy);
$this->_em->flush();
$this->_em->clear();
-
+
$query = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u');
$result = $query->getResult();
-
+
$this->assertEquals(0, count($result), 'CmsUser should be removed by EntityManager');
-
+
+ $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p');
+ $result = $query->getResult();
+
+ $this->assertEquals(0, count($result), 'CmsPhonenumber should be removed by orphanRemoval');
+ }
+
+ /**
+ * @group DDC-1496
+ */
+ public function testOrphanRemovalUnitializedCollection()
+ {
+ $user = $this->_em->find('Doctrine\Tests\Models\CMS\CmsUser', $this->userId);
+
+ $user->phonenumbers->clear();
+ $this->_em->flush();
+
$query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p');
$result = $query->getResult();
-
+
$this->assertEquals(0, count($result), 'CmsPhonenumber should be removed by orphanRemoval');
}
}

0 comments on commit ef0a901

Please sign in to comment.