Преобразование результата queryBuilder в ассоциативный массив

я ищу способ, как преобразовать результат построителя запросов в ассоциативный массив. Но мне нужно включить данные отношения из другой таблицы. Если я использую метод getArrayResult(), он дает мне массив, но без внешних ключей. И мне нужны внешние ключи, включенные во вложенный массив с данными ассоциативной таблицы БД. EDIT: Вот мой код:

$qb = $this->_em->createQueryBuilder();
$qb->select('p');
$qb->from('XXX\MyBundle\Entity\Entity1', 'p');

$qb->leftJoin('p.FK1','u');
$qb->andWhere('u.Attr1 = :attr1');
$qb->setParameter('attr1', $appId);
$qb->andWhere('u.Attr2 IS NULL');
$qb->leftJoin('u.FK2', 'v');
$qb->andWhere('v.Attr3 = :attr3');
$qb->andWhere('v.Attr4 IS NULL');
$qb->setParameter('attr3', $userId);


$result = $qb->getQuery()->getArrayResult();

Мне нужно это преобразование из-за SOAP. Он не мог вернуть сложный объект как вложенные объекты сущностей.


person gavec    schedule 17.03.2013    source источник
comment
Не могли бы вы показать код запроса?   -  person Gmajoulet    schedule 17.03.2013
comment
Я отредактировал свой вопрос.   -  person gavec    schedule 17.03.2013


Ответы (1)


Во-первых, вам нужно написать эту функцию в вашем Entity1Repository.php.

Поскольку вы используете метод createQueryBuilder(), вам не нужно использовать методы select и from. В вашем примере вы пишете соединения, но не просите запрос вернуть эти объединения.

Попробуйте этот код:

<?php

namespace XXX\\MyBundle\Entity;

use Doctrine\ORM\EntityRepository;

class Entity1Repository extends EntityRepository
{
    public function getEntityWithJoins()
    {
        return $this
            ->createQueryBuilder('p')
            ->addSelect('u')
            ->addSelect('v')
            ->leftJoin('p.FK1','u')
            ->andWhere('u.Attr1 = :attr1')
            ->setParameter('attr1', $appId)
            ->andWhere('u.Attr2 IS NULL')
            ->leftJoin('u.FK2', 'v')
            ->andWhere('v.Attr3 = :attr3')
            ->andWhere('v.Attr4 IS NULL')
            ->setParameter('attr3', $userId);
            ->getQuery()
            ->getArrayResult();
    }
}
person Gmajoulet    schedule 17.03.2013
comment
Большое спасибо. Но есть следующая проблема, что он возвращает вложенный массив только одного внешнего ключа, а в массиве два FKs in one table and the second one isnt; - person gavec; 17.03.2013
comment
Я понял... мне нужно создать еще один leftJoin, но я не знаю как, для второго FK в таблице. - person gavec; 17.03.2013
comment
Просто добавьте leftJoin и addSelect... В чем проблема? - person Gmajoulet; 17.03.2013