Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Fixed DDC1778 #336

Merged
merged 1 commit into from

2 participants

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

    Fixed DDC1778

    merk authored
This page is out of date. Refresh to see the latest.
8 lib/Doctrine/ORM/PersistentCollection.php
View
@@ -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();
}
}
74 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php
View
@@ -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.