1
0
mirror of synced 2025-01-10 11:07:10 +03:00
doctrine2/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php

160 lines
3.9 KiB
PHP

<?php
namespace Doctrine\Tests\ORM\Functional\Ticket;
/**
* @group DDC-2575
*/
class DDC2575Test extends \Doctrine\Tests\OrmFunctionalTestCase
{
private $rootsEntities = array();
private $aEntities = array();
private $bEntities = array();
protected function setUp()
{
parent::setUp();
$this->_schemaTool->createSchema(array(
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2575Root'),
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2575A'),
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2575B'),
));
$entityRoot1 = new DDC2575Root(1);
$entityB1 = new DDC2575B(2);
$entityA1 = new DDC2575A($entityRoot1, $entityB1);
$this->_em->persist($entityRoot1);
$this->_em->persist($entityA1);
$this->_em->persist($entityB1);
$entityRoot2 = new DDC2575Root(3);
$entityB2 = new DDC2575B(4);
$entityA2 = new DDC2575A($entityRoot2, $entityB2);
$this->_em->persist($entityRoot2);
$this->_em->persist($entityA2);
$this->_em->persist($entityB2);
$this->_em->flush();
$this->rootsEntities[] = $entityRoot1;
$this->rootsEntities[] = $entityRoot2;
$this->aEntities[] = $entityA1;
$this->aEntities[] = $entityA2;
$this->bEntities[] = $entityB1;
$this->bEntities[] = $entityB2;
$this->_em->clear();
}
public function testHydrationIssue()
{
$repository = $this->_em->getRepository(__NAMESPACE__ . '\DDC2575Root');
$qb = $repository->createQueryBuilder('r')
->select('r, a, b')
->leftJoin('r.aRelation', 'a')
->leftJoin('a.bRelation', 'b');
$query = $qb->getQuery();
$result = $query->getResult();
$this->assertCount(2, $result);
$row = $result[0];
$this->assertNotNull($row->aRelation);
$this->assertEquals(1, $row->id);
$this->assertNotNull($row->aRelation->rootRelation);
$this->assertSame($row, $row->aRelation->rootRelation);
$this->assertNotNull($row->aRelation->bRelation);
$this->assertEquals(2, $row->aRelation->bRelation->id);
$row = $result[1];
$this->assertNotNull($row->aRelation);
$this->assertEquals(3, $row->id);
$this->assertNotNull($row->aRelation->rootRelation);
$this->assertSame($row, $row->aRelation->rootRelation);
$this->assertNotNull($row->aRelation->bRelation);
$this->assertEquals(4, $row->aRelation->bRelation->id);
}
}
/**
* @Entity
*/
class DDC2575Root
{
/**
* @Id
* @Column(type="integer")
*/
public $id;
/**
* @Column(type="integer")
*/
public $sampleField;
/**
* @OneToOne(targetEntity="DDC2575A", mappedBy="rootRelation")
**/
public $aRelation;
public function __construct($id, $value = 0)
{
$this->id = $id;
$this->sampleField = $value;
}
}
/**
* @Entity
*/
class DDC2575A
{
/**
* @Id
* @OneToOne(targetEntity="DDC2575Root", inversedBy="aRelation")
* @JoinColumn(name="root_id", referencedColumnName="id", nullable=FALSE, onDelete="CASCADE")
*/
public $rootRelation;
/**
* @ManyToOne(targetEntity="DDC2575B")
* @JoinColumn(name="b_id", referencedColumnName="id", nullable=FALSE, onDelete="CASCADE")
*/
public $bRelation;
public function __construct(DDC2575Root $rootRelation, DDC2575B $bRelation)
{
$this->rootRelation = $rootRelation;
$this->bRelation = $bRelation;
}
}
/**
* @Entity
*/
class DDC2575B
{
/**
* @Id
* @Column(type="integer")
*/
public $id;
/**
* @Column(type="integer")
*/
public $sampleField;
public function __construct($id, $value = 0)
{
$this->id = $id;
$this->sampleField = $value;
}
}