Doctrine仅检索所选列的索引

时间:2016-09-25 07:25:55

标签: doctrine-orm doctrine symfony

我目前正在重构一个用Symfony 3编写的应用程序,并且在很大程度上依赖于Doctrine ORM而且我试图获得一个包含所选列索引的对象/数组。

现在我对PHP PDO非常熟悉,并且我记得查询结果的基本提取,如下所示

$sth->fetchAll();

(根据我的查询)它会给我一个类似下面的数组

  [0] => Array
    (
        [name] => pear
        [0] => pear
        [colour] => green
        [1] => green
    )

[1] => Array
    (
        [name] => watermelon
        [0] => watermelon
        [colour] => pink
        [1] => pink
    )

使用Doctrine,我尝试使用几个带有水化参数的内置函数

$query->getResult(); 

没有运气,我最终得到了这样的东西

Array
(
  [0] => Array
    (
        [name] => pear
        [colour] => green
    )

 [1] => Array
    (
        [name] => Watermelon
        [colour] => Pink
    )
)

有人可以帮助我或指出我正确的方向如何正确地解决这个问题吗?

------更新了问题以包含我目前正在使用的完整方法----

public function getDepartmentCount()
{
    $qb = $this->createQueryBuilder('fruit')
        ->leftJoin('fruit.color','color')
    $query=$qb->getQuery();
    return $query->getArrayResult(); //Method that possibly needs to be changed
}

1 个答案:

答案 0 :(得分:0)

创建自定义Hydrator之后,我已经能够自己解决这个问题了。

我会在这里为任何可能遇到类似问题的人保留解决方案。

以下是自定义Hydrator的类

namespace AppBundle\Doctrine;
use Doctrine\ORM\Internal\Hydration\AbstractHydrator;
use PDO;

class CustomHydrator extends AbstractHydrator
{
    /**
    * Hydrates all rows from the current statement instance at once.
    *
    * @return array
    */
    protected function hydrateAllData()
    {
        // TODO: Implement hydrateAllData() method.
        return $this->_stmt->fetchAll(PDO::FETCH_NUM);
    }
}

在orm部分下的配置文件中添加了这个,告诉Symfony在哪里可以找到Custom Hydrator及其名称

hydrators:
          GridDataHydrator: AppBundle\Doctrine\CustomHydrator

最后使用此方法执行查询

$query->getResult('GridDataHydrator');