1
0
mirror of synced 2025-01-18 14:31:40 +03:00

DDC656 - Fix bug with order of fields when recomputeSingleEntityChangeSet() is called after lifecycle events are invoked

This commit is contained in:
beberlei 2010-07-04 08:54:57 +02:00
parent fbaa4e3215
commit b56e1e31af
2 changed files with 83 additions and 1 deletions

View File

@ -658,7 +658,7 @@ class UnitOfWork implements PropertyChangedListener
if ($changeSet) {
if (isset($this->_entityChangeSets[$oid])) {
$this->_entityChangeSets[$oid] = $changeSet + $this->_entityChangeSets[$oid];
$this->_entityChangeSets[$oid] = array_merge($this->_entityChangeSets[$oid], $changeSet);
}
$this->_originalEntityData[$oid] = $actualData;
}

View File

@ -0,0 +1,82 @@
<?php
namespace Doctrine\Tests\ORM\Functional\Ticket;
use DateTime;
require_once __DIR__ . '/../../../TestInit.php';
class DDC656Test extends \Doctrine\Tests\OrmFunctionalTestCase
{
protected function setUp()
{
parent::setUp();
try {
$this->_schemaTool->createSchema(array(
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC656Entity')
));
} catch(\Exception $e) {
}
}
public function testRecomputeSingleEntityChangeSet_PreservesFieldOrder()
{
$entity = new DDC656Entity();
$entity->setName('test1');
$entity->setType('type1');
$this->_em->persist($entity);
$this->_em->getUnitOfWork()->computeChangeSet($this->_em->getClassMetadata(get_class($entity)), $entity);
$data1 = $this->_em->getUnitOfWork()->getEntityChangeset($entity);
$entity->setType('type2');
$this->_em->getUnitOfWork()->recomputeSingleEntityChangeSet($this->_em->getClassMetadata(get_class($entity)), $entity);
$data2 = $this->_em->getUnitOfWork()->getEntityChangeset($entity);
$this->assertEquals(array_keys($data1), array_keys($data2));
$this->_em->flush();
$this->_em->clear();
$persistedEntity = $this->_em->find(get_class($entity), $entity->specificationId);
$this->assertEquals('type2', $persistedEntity->getType());
$this->assertEquals('test1', $persistedEntity->getName());
}
}
/**
* @Entity
*/
class DDC656Entity
{
/**
* @Column(type="string")
*/
public $name;
/**
* @Column(type="string")
*/
public $type;
/**
* @Id @Column(type="integer") @GeneratedValue
*/
public $specificationId;
public function getName() {
return $this->name;
}
public function setName($name) {
$this->name = $name;
}
public function getType() {
return $this->type;
}
public function setType($type) {
$this->type = $type;
}
}