Merge branch 'DDC-1526'
This commit is contained in:
commit
585ba534a6
@ -359,7 +359,6 @@ class ObjectHydrator extends AbstractHydrator
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$parentClass = $this->_ce[$this->_rsm->aliasMap[$parentAlias]];
|
$parentClass = $this->_ce[$this->_rsm->aliasMap[$parentAlias]];
|
||||||
$oid = spl_object_hash($parentObject);
|
$oid = spl_object_hash($parentObject);
|
||||||
$relationField = $this->_rsm->relationMap[$dqlAlias];
|
$relationField = $this->_rsm->relationMap[$dqlAlias];
|
||||||
@ -368,6 +367,7 @@ class ObjectHydrator extends AbstractHydrator
|
|||||||
|
|
||||||
// Check the type of the relation (many or single-valued)
|
// Check the type of the relation (many or single-valued)
|
||||||
if ( ! ($relation['type'] & ClassMetadata::TO_ONE)) {
|
if ( ! ($relation['type'] & ClassMetadata::TO_ONE)) {
|
||||||
|
$reflFieldValue = $reflField->getValue($parentObject);
|
||||||
// PATH A: Collection-valued association
|
// PATH A: Collection-valued association
|
||||||
if (isset($nonemptyComponents[$dqlAlias])) {
|
if (isset($nonemptyComponents[$dqlAlias])) {
|
||||||
$collKey = $oid . $relationField;
|
$collKey = $oid . $relationField;
|
||||||
@ -408,9 +408,12 @@ class ObjectHydrator extends AbstractHydrator
|
|||||||
// Update result pointer
|
// Update result pointer
|
||||||
$this->_resultPointers[$dqlAlias] = $reflFieldValue[$index];
|
$this->_resultPointers[$dqlAlias] = $reflFieldValue[$index];
|
||||||
}
|
}
|
||||||
} else if ( ! $reflField->getValue($parentObject)) {
|
} else if ( ! $reflFieldValue) {
|
||||||
$reflFieldValue = $this->_initRelatedCollection($parentObject, $parentClass, $relationField, $parentAlias);
|
$reflFieldValue = $this->_initRelatedCollection($parentObject, $parentClass, $relationField, $parentAlias);
|
||||||
|
} else if ($reflFieldValue instanceof PersistentCollection && $reflFieldValue->isInitialized() === false) {
|
||||||
|
$reflFieldValue->setInitialized(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// PATH B: Single-valued association
|
// PATH B: Single-valued association
|
||||||
$reflFieldValue = $reflField->getValue($parentObject);
|
$reflFieldValue = $reflField->getValue($parentObject);
|
||||||
|
67
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1526Test.php
Normal file
67
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1526Test.php
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group DDC-1526
|
||||||
|
*/
|
||||||
|
class DDC1526Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||||
|
{
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
$this->_schemaTool->createSchema(array(
|
||||||
|
$this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1526Menu'),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIssue()
|
||||||
|
{
|
||||||
|
$parents = array();
|
||||||
|
for ($i = 0; $i < 9; $i++) {
|
||||||
|
$entity = new DDC1526Menu;
|
||||||
|
|
||||||
|
if (isset ($parents[($i % 3)])) {
|
||||||
|
$entity->parent = $parents[($i%3)];
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_em->persist($entity);
|
||||||
|
$parents[$i] = $entity;
|
||||||
|
}
|
||||||
|
$this->_em->flush();
|
||||||
|
$this->_em->clear();
|
||||||
|
|
||||||
|
|
||||||
|
$dql = "SELECT m, c
|
||||||
|
FROM " . __NAMESPACE__ . "\DDC1526Menu m
|
||||||
|
LEFT JOIN m.children c";
|
||||||
|
$menus = $this->_em->createQuery($dql)->getResult();
|
||||||
|
|
||||||
|
// All Children collection now have to be initiailzed
|
||||||
|
foreach ($menus as $menu) {
|
||||||
|
$this->assertTrue($menu->children->isInitialized());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Entity
|
||||||
|
*/
|
||||||
|
class DDC1526Menu
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @Column(type="integer")
|
||||||
|
* @Id
|
||||||
|
* @GeneratedValue
|
||||||
|
*/
|
||||||
|
public $id;
|
||||||
|
/**
|
||||||
|
* @ManyToOne(targetEntity="DDC1526Menu", inversedBy="children")
|
||||||
|
*/
|
||||||
|
public $parent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OneToMany(targetEntity="DDC1526Menu", mappedBy="parent")
|
||||||
|
*/
|
||||||
|
public $children;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user