Details
Description
Hi.
Problem with ArrayHydrator and composite primary key.
Given the following data (PRIMARY KEY (`ancestor_id`,`descendant_id`))
| ancestor_id | descendant_id | depth |
|---|---|---|
| 1 | 1 | 0 |
| 1 | 2 | 1 |
$query = $em->createQuery("SELECT c,d FROM ResourceClosure c JOIN c.descendant d WHERE c.ancestor = 1");
echo 'ObjectHydrator result count = '.count($query->getResult()).PHP_EOL;
echo 'ArrayHydrator result count = '.count($query->getArrayResult()).PHP_EOL;
Output
ObjectHydrator result count = 2 ArrayHydrator result count = 1
Expected both counts are equals 2.
In case getArrayResult() in result only first record hydrated, second record are ommited
Below examples model and insertion in db
ResourceClosure
/**
* @Entity
*/
class ResourceClosure
{
/**
* @Id
* @ManyToOne(targetEntity="Resource")
* @JoinColumn(name="ancestor_id", referencedColumnName="id")
*
*/
private $ancestor;
/**
* @Id
* @ManyToOne(targetEntity="Resource")
* @JoinColumn(name="descendant_id", referencedColumnName="id")
* @var Resource
*/
private $descendant;
/**
* @Column(name="depth", type="integer")
* @var integer
*/
private $depth;
}
Insertion
$resource1 = new Entity\Resource('resource1'); $em->persist($resource1); $resource2 = new Entity\Resource('resource2'); $em->persist($resource2); $em->flush(); $closure1 = new Entity\ResourceClosure(); $closure1->setAncestor($resource1) ->setDescendant($resource1) ->setDepth(0); $em->persist($closure1); $closure2= new Entity\ResourceClosure(); $closure2->setAncestor($resource1) ->setDescendant($resource2) ->setDepth(1); $em->persist($closure2); $em->flush();
P.S.
Its work like expected in case entity ResourceClosure has simple primary key.
Verified