为什么这个查询不起作用?
$query = $this->_em->createQuery('
SELECT
COUNT(p) AS products_count
FROM
Application\Entity\Category c
INDEX BY c.id
LEFT JOIN c.products p
GROUP BY
c.id
');
$rows = $query->getSingleScalarResult();
我希望得到的结果为:" category_id => products_count"数组,但它抛出一个没有任何消息的Doctrine \ ORM \ NonUniqueResultException。
答案 0 :(得分:1)
如果您COUNT
查询中的GROUPED
行,则会返回多个结果,并显示每个组的计数。在您的情况下,您将获得每个Category
的计数。
如果您对包含多个条目的结果尝试getSingleScalarResult()
,则会生成Doctrine\ORM\NonUniqueResultException
。相反,您应该使用getScalarResult()
并遍历条目。
修改强>
要将结果转换为array("category_id" => "products_count_value")
格式,您可以使用以下代码:
$output = array();
foreach ($rows as $category, $values) {
$output[$category] = $values['products_count'];
}
$output
现在应该按照您希望的方式包含值。
答案 1 :(得分:0)
This trait将以简单实体字段的预期格式为您提供结果。在您的存储库中use
之后,您可以像这样使用它:
$em->getRepository('AppBundle:Branch')->getIndexedList('id', 'name');
但是,就您的情况而言,由于它有一些聚合结果,您可以在存储库中编写类似的函数。
(尽管这是一个非常老的问题,将其张贴在此处,以便为正在寻找类似想法的人提供提示。)
答案 2 :(得分:0)
正如其他人已经说过的那样,默认情况下,Doctrine不支持此功能。您可以为此使用PHP的array_column
函数:
$query = $this->_em->createQuery('
SELECT
COUNT(p) AS products_count, c.id AS category_id
FROM
Application\Entity\Category c
LEFT JOIN c.products p
GROUP BY
c.id
');
$pairs = array_column($query->getArrayResult(), 'products_count', 'category_id');