1
0
mirror of synced 2025-02-02 21:41:45 +03:00

add functional test and bug fix for issue #5762

This commit is contained in:
John Keller 2016-04-12 13:43:45 -07:00 committed by Marco Pivetta
parent a90f23dfc7
commit 3bec698fed
2 changed files with 231 additions and 0 deletions

View File

@ -329,6 +329,9 @@ class ObjectHydrator extends AbstractHydrator
// Split the row data into chunks of class data.
$rowData = $this->gatherRowData($row, $id, $nonemptyComponents);
// reset result pointers for each data row
$this->resultPointers = array();
// Hydrate the data chunks
foreach ($rowData['data'] as $dqlAlias => $data) {
$entityName = $this->_rsm->aliasMap[$dqlAlias];

View File

@ -0,0 +1,228 @@
<?php
namespace Doctrine\Tests\ORM\Functional\Ticket;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @group GH-5762
*/
class GH5762Test extends \Doctrine\Tests\OrmFunctionalTestCase
{
protected function setup()
{
parent::setup();
$this->_schemaTool->createSchema(array(
$this->_em->getClassMetadata(__NAMESPACE__ . '\GH5762Driver'),
$this->_em->getClassMetadata(__NAMESPACE__ . '\GH5762DriverRide'),
$this->_em->getClassMetadata(__NAMESPACE__ . '\GH5762Car'),
));
}
public function testIssue()
{
$result = $this->fetchData();
$this->assertInstanceOf(__NAMESPACE__ . '\GH5762Driver', $result);
$this->assertInstanceOf('Doctrine\ORM\PersistentCollection', $result->getDriverRides());
$this->assertInstanceOf(__NAMESPACE__ . '\GH5762DriverRide', $result->getDriverRides()->get(0));
$this->assertInstanceOf(__NAMESPACE__ . '\GH5762Car', $result->getDriverRides()->get(0)->getCar());
$cars = array();
foreach ($result->getDriverRides() as $ride) {
$cars[] = $ride->getCar()->getBrand();
}
$this->assertEquals(count($cars), count(array_unique($cars)));
$this->assertContains('BMW', $cars);
$this->assertContains('Crysler', $cars);
$this->assertContains('Dodge', $cars);
$this->assertContains('Mercedes', $cars);
$this->assertContains('Volvo', $cars);
}
private function fetchData()
{
$this->createData();
$qb = $this->_em->createQueryBuilder();
$qb->select('d, dr, c')
->from(__NAMESPACE__ . '\GH5762Driver', 'd')
->leftJoin('d.driverRides', 'dr')
->leftJoin('dr.car', 'c')
->where('d.id = 1');
return $qb->getQuery()->getSingleResult();
}
private function createData()
{
$car1 = new GH5762Car('BMW', '7 Series');
$car2 = new GH5762Car('Crysler', '300');
$car3 = new GH5762Car('Dodge', 'Dart');
$car4 = new GH5762Car('Mercedes', 'C-Class');
$car5 = new GH5762Car('Volvo', 'XC90');
$driver = new GH5762Driver(1, 'John Doe');
$ride1 = new GH5762DriverRide($driver, $car1);
$ride2 = new GH5762DriverRide($driver, $car2);
$ride3 = new GH5762DriverRide($driver, $car3);
$ride4 = new GH5762DriverRide($driver, $car4);
$ride5 = new GH5762DriverRide($driver, $car5);
$this->_em->persist($car1);
$this->_em->persist($car2);
$this->_em->persist($car3);
$this->_em->persist($car4);
$this->_em->persist($car5);
$this->_em->persist($driver);
$this->_em->persist($ride1);
$this->_em->persist($ride2);
$this->_em->persist($ride3);
$this->_em->persist($ride4);
$this->_em->persist($ride5);
$this->_em->flush();
$this->_em->clear();
}
}
/**
* @Entity
* @Table(name="driver")
*/
class GH5762Driver
{
/**
* @Id
* @Column(type="integer")
* @GeneratedValue(strategy="NONE")
*/
private $id;
/**
* @Column(type="string", length=255);
*/
private $name;
/**
* @OneToMany(targetEntity="GH5762DriverRide", mappedBy="driver")
*/
private $driverRides;
function __construct($id, $name)
{
$this->driverRides = new ArrayCollection();
$this->id = $id;
$this->name = $name;
}
function getId()
{
return $this->id;
}
function getName()
{
return $this->name;
}
function getDriverRides()
{
return $this->driverRides;
}
}
/**
* @Entity
* @Table(name="driver_ride")
*/
class GH5762DriverRide
{
/**
* @Id
* @ManyToOne(targetEntity="GH5762Driver", inversedBy="driverRides")
* @JoinColumn(name="driver_id", referencedColumnName="id")
*/
private $driver;
/**
* @Id
* @ManyToOne(targetEntity="GH5762Car", inversedBy="carRides")
* @JoinColumn(name="car", referencedColumnName="brand")
*/
private $car;
function __construct(GH5762Driver $driver, GH5762Car $car)
{
$this->driver = $driver;
$this->car = $car;
$this->driver->getDriverRides()->add($this);
$this->car->getCarRides()->add($this);
}
function getDriver()
{
return $this->driver;
}
function getCar()
{
return $this->car;
}
}
/**
* @Entity
* @Table(name="car")
*/
class GH5762Car
{
/**
* @Id
* @Column(type="string", length=25)
* @GeneratedValue(strategy="NONE")
*/
private $brand;
/**
* @Column(type="string", length=255);
*/
private $model;
/**
* @OneToMany(targetEntity="GH5762DriverRide", mappedBy="car")
*/
private $carRides;
function __construct($brand, $model)
{
$this->carRides = new ArrayCollection();
$this->brand = $brand;
$this->model = $model;
}
function getBrand()
{
return $this->brand;
}
function getModel()
{
return $this->model;
}
function getCarRides()
{
return $this->carRides;
}
}