Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to return object from a DQL query?

I have written a DQL query in Doctrine 2:

$qb->select('r.position')
    ->from('\Entities\Races', 'r')
    ->where($qb->expr()->eq('r.entrantId', ':entrant_id'))
    ->setParameter('entrant_id', $this->entrantId);
$query = $qb->getQuery();
$aRaces = $query->getResult();

Currently it returns the results of the query in an array like so:

Array
(
    [0] => Array
        (
            [position] => 10
        )

    [1] => Array
        (
            [position] => 4
        )
)

I want the result to return an array of Races objects so that I can access the methods associated with the object (I'm pretty sure the previous version of Doctrine returned objects by default).

I tried:

$aRaces = $query->getResult(Query::HYDRATE_OBJECT);

But that didn't make a difference.

Appreciate the help

like image 852
Mr B Avatar asked Aug 15 '11 10:08

Mr B


3 Answers

You are fetching only position column from DB. Try replacing select('r.position') with select(r). See DQL reference

If you need objects with only position attribute, refer to partial objects

like image 136
J0HN Avatar answered Oct 30 '22 00:10

J0HN


The: $qb->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT);

Return an array with object and you can catch them with: $match[0];

If you want to return a single result you must be use: $qb->getOneOrNullResult()

like image 3
onalbi Avatar answered Oct 30 '22 00:10

onalbi


I could not solve my problem with your solution, here my part of code:

$qb = $this->_objectManager->createQuery('Select d from Hotbed\Entity\Department d where d.id <> :id and d.title = :title');
        $qb->setParameters(array('id' => $context['id'], 'title' => $value));
        $match = $qb->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT);

$match returns this:

array(1) {
 [0] => object(Hotbed\Entity\Department)#626 (4) {
   ['inputFilter':protected] =&gt; NULL
   ['id':protected] =&gt; int(25)
   ['title':protected] => string(4) '2222'
   ['state':protected] => int(0)
 }
}

thx for any help

like image 1
cwhisperer Avatar answered Oct 30 '22 00:10

cwhisperer