Merge branch 'DDC-2231'
This commit is contained in:
commit
6f572a61c7
@ -2477,17 +2477,23 @@ class UnitOfWork implements PropertyChangedListener
|
|||||||
if ($entity instanceof NotifyPropertyChanged) {
|
if ($entity instanceof NotifyPropertyChanged) {
|
||||||
$entity->addPropertyChangedListener($this);
|
$entity->addPropertyChangedListener($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// inject ObjectManager into just loaded proxies.
|
||||||
|
if ($overrideLocalValues && $entity instanceof ObjectManagerAware) {
|
||||||
|
$entity->injectObjectManager($this->em, $class);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$overrideLocalValues = isset($hints[Query::HINT_REFRESH]);
|
$overrideLocalValues = isset($hints[Query::HINT_REFRESH]);
|
||||||
|
|
||||||
// If only a specific entity is set to refresh, check that it's the one
|
// If only a specific entity is set to refresh, check that it's the one
|
||||||
if(isset($hints[Query::HINT_REFRESH_ENTITY])) {
|
if(isset($hints[Query::HINT_REFRESH_ENTITY])) {
|
||||||
$overrideLocalValues = $hints[Query::HINT_REFRESH_ENTITY] === $entity;
|
$overrideLocalValues = $hints[Query::HINT_REFRESH_ENTITY] === $entity;
|
||||||
|
}
|
||||||
|
|
||||||
// inject ObjectManager into just loaded proxies.
|
// inject ObjectManager upon refresh.
|
||||||
if ($overrideLocalValues && $entity instanceof ObjectManagerAware) {
|
if ($overrideLocalValues && $entity instanceof ObjectManagerAware) {
|
||||||
$entity->injectObjectManager($this->em, $class);
|
$entity->injectObjectManager($this->em, $class);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
71
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php
Normal file
71
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||||
|
|
||||||
|
use Doctrine\Common\Persistence\Mapping\ClassMetadata;
|
||||||
|
|
||||||
|
use Doctrine\Common\Persistence\ObjectManager;
|
||||||
|
|
||||||
|
use Doctrine\Common\Persistence\ObjectManagerAware;
|
||||||
|
|
||||||
|
require_once __DIR__ . '/../../../TestInit.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group DDC-2231
|
||||||
|
*/
|
||||||
|
class DDC2231Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||||
|
{
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
$this->_schemaTool->createSchema(array(
|
||||||
|
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2231EntityY'),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInjectObjectManagerInProxyIfInitializedInUow()
|
||||||
|
{
|
||||||
|
$y1 = new DDC2231EntityY;
|
||||||
|
|
||||||
|
$this->_em->persist($y1);
|
||||||
|
|
||||||
|
$this->_em->flush();
|
||||||
|
$this->_em->clear();
|
||||||
|
|
||||||
|
$y1ref = $this->_em->getReference(get_class($y1), $y1->id);
|
||||||
|
|
||||||
|
$this->assertInstanceOf('Doctrine\ORM\Proxy\Proxy', $y1ref);
|
||||||
|
$this->assertFalse($y1ref->__isInitialized__);
|
||||||
|
|
||||||
|
$id = $y1ref->doSomething();
|
||||||
|
|
||||||
|
$this->assertTrue($y1ref->__isInitialized__);
|
||||||
|
$this->assertEquals($this->_em, $y1ref->om);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** @Entity @Table(name="ddc2231_y") */
|
||||||
|
class DDC2231EntityY implements ObjectManagerAware
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @Id @Column(type="integer") @GeneratedValue
|
||||||
|
*/
|
||||||
|
public $id;
|
||||||
|
|
||||||
|
public $om;
|
||||||
|
|
||||||
|
public function injectObjectManager(ObjectManager $objectManager, ClassMetadata $classMetadata)
|
||||||
|
{
|
||||||
|
$this->om = $objectManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getId()
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function doSomething()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user