如何从DQL查询返回对象?

时间:2011-08-15 10:29:39

标签: php doctrine-orm dql

我在Doctrine 2中编写了一个DQL查询:

$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();

目前,它在数组中返回查询结果,如下所示:

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

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

我希望结果返回一个Races 对象的数组,以便我可以访问与该对象关联的方法(我很确定默认情况下以前版本的Doctrine返回了对象)。 / p>

我试过了:

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

但这并没有什么不同。

感谢帮助

3 个答案:

答案 0 :(得分:4)

您只从DB中获取position列。尝试将select('r.position')替换为select(r)。见DQL reference

如果您需要只有position属性的对象,请参阅partial objects

答案 1 :(得分:2)

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

返回一个包含对象的数组,您可以使用:$match[0];

来捕获它们

如果您想要返回单个结果,则必须使用:$qb->getOneOrNullResult()

答案 2 :(得分:0)

我无法用您的解决方案解决我的问题,这是我的部分代码:

$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返回:

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任何帮助