diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 4a0c5663f..2f5167d08 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -485,7 +485,7 @@ class UnitOfWork implements PropertyChangedListener } } } - + // Look for changes in associations of the entity foreach ($class->associationMappings as $assoc) { $val = $class->reflFields[$assoc->sourceFieldName]->getValue($entity); @@ -2042,9 +2042,15 @@ class UnitOfWork implements PropertyChangedListener $oid = spl_object_hash($entity); $class = $this->_em->getClassMetadata(get_class($entity)); + $isAssocField = isset($class->associationMappings[$propertyName]); + + if ( ! $isAssocField && ! isset($class->fieldMappings[$propertyName])) { + return; // ignore non-persistent fields + } + $this->_entityChangeSets[$oid][$propertyName] = array($oldValue, $newValue); - if (isset($class->associationMappings[$propertyName])) { + if ($isAssocField) { $assoc = $class->associationMappings[$propertyName]; if ($assoc->isOneToOne() && $assoc->isOwningSide) { $this->_entityUpdates[$oid] = $entity; diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index 2ace68f0b..12b9c1ea0 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -140,6 +140,7 @@ class UnitOfWorkTest extends \Doctrine\Tests\OrmTestCase $this->assertTrue($this->_unitOfWork->isInIdentityMap($entity)); $entity->setData('newdata'); + $entity->setTransient('newtransientvalue'); $this->assertTrue($this->_unitOfWork->isScheduledForUpdate($entity)); @@ -206,10 +207,19 @@ class NotifyChangedEntity implements \Doctrine\Common\NotifyPropertyChanged */ private $data; + private $transient; // not persisted + public function getId() { return $this->id; } + public function setTransient($value) { + if ($value != $this->transient) { + $this->_onPropertyChanged('transient', $this->transient, $value); + $this->transient = $value; + } + } + public function getData() { return $this->data; }