将queryBuilder结果转换为关联数组

时间:2013-03-17 13:49:51

标签: php symfony doctrine-orm query-builder

即时搜索方式,如何将查询构建器结果转换为关联数组。但我需要的是包括来自另一个表的关系数据。 如果我使用getArrayResult()方法,它会给我一个数组,但没有外键。我需要嵌套数组中包含的外键和关联数据库表的数据。 修改 这是我的代码:

$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。它无法将复杂对象作为实体的嵌套对象返回。

1 个答案:

答案 0 :(得分:2)

首先,您需要在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();
    }
}