Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Fixed DDC1778 #336

Merged
merged 1 commit into from

2 participants

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Apr 16, 2012
  1. @merk

    Fixed DDC1778

    merk authored
This page is out of date. Refresh to see the latest.
View
8 lib/Doctrine/ORM/PersistentCollection.php
@@ -389,6 +389,7 @@ public function remove($key)
if ($this->association !== null &&
$this->association['type'] & ClassMetadata::TO_MANY &&
+ $this->owner &&
$this->association['orphanRemoval']) {
$this->em->getUnitOfWork()->scheduleOrphanRemoval($removed);
}
@@ -427,6 +428,7 @@ public function removeElement($element)
if ($this->association !== null &&
$this->association['type'] & ClassMetadata::TO_MANY &&
+ $this->owner &&
$this->association['orphanRemoval']) {
$this->em->getUnitOfWork()->scheduleOrphanRemoval($element);
}
@@ -631,7 +633,9 @@ public function clear()
$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 @@ public function __clone()
}
$this->snapshot = array();
-
+
$this->changed();
}
}
View
74 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php
@@ -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());
+ }
+}
Something went wrong with that request. Please try again.