Как вернуть объект из DQL-запроса? - PullRequest
4 голосов
/ 15 августа 2011

Я написал DQL-запрос в 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();

В настоящее время он возвращает результаты запроса в виде массива:

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

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

Я хочу, чтобы результат возвращал массив Races объектов , чтобы я мог получить доступ к методам, связанным с объектом (я уверен, что предыдущая версия Doctrine возвращала объекты по умолчанию).

Я пытался:

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

Но это не имело значения.

Ценю помощь

Ответы [ 3 ]

4 голосов
/ 15 августа 2011

Вы извлекаете только столбец position из БД. Попробуйте заменить select('r.position') на select(r). См. Справочник по DQL

.

Если вам нужны объекты только с атрибутом position, обратитесь к частичным объектам

2 голосов
/ 13 апреля 2014

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

Возвращает массив с объектом, и вы можете поймать их с помощью: $match[0];

Если вы хотите вернуть один результат, вы должны использовать: $qb->getOneOrNullResult()

0 голосов
/ 18 ноября 2013

Я не смог решить мою проблему с вашим решением, вот моя часть кода:

$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)
 }
}

спасибо за любую помощь

...