我目前正在重构一个用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
}
答案 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');