DDC656 - Fix bug with order of fields when recomputeSingleEntityChangeSet() is called after lifecycle events are invoked
This commit is contained in:
parent
fbaa4e3215
commit
b56e1e31af
@ -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;
|
||||
}
|
||||
|
82
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC656Test.php
Normal file
82
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC656Test.php
Normal 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;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user