Doctrine INDEX BY 外键

Doctrine INDEX BY foreign key

我正在尝试从 article_stats table 中获取文章的摘要数据,并用文章 ID 建立索引。

查询生成器如下所示:

$qb = $this->articlesStatsRepository->createQueryBuilder('ass');
$qb->select('SUM(ass.pageviews)')
    ->indexBy('ass', 'ass.article') // this doesnt work
    ->groupBy('ass.article');

$articleStats = $query->getResult();

查询结果

SELECT SUM(ass.pageviews) 
FROM AppBundle\Entity\ArticleStats ass 
INDEX BY ass.article 
GROUP BY ass.article

错误为:

[Semantical Error] near 'article GROUP': 
Error: Invalid PathExpression. Must be a StateFieldPathExpression.

我试过了->indexBy('ass', 'IDENTITY(ass.article)'),但也没用。

那么我怎样才能 select 外键索引的数据库中的数据?

这样试试:

$qb = $em->createQueryBuilder();

$qb->select('SUM(ass.pageviews)')
   ->from('YourBundle:article_stats', 'ass', 'ass.article')
   ->groupBy('ass.article');

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

在没有看到实体的确切组成及其关系的情况下,很难给出准确的答案。即便如此,如果 ass.article 是一个实体,而不是数字文章 ID,查询将不起作用。 INDEX BY 必须与 ORM 列一起使用。

示例如下:

SELECT a.id, SUM(c.visits) AS visits
FROM Customer c
LEFT JOIN c.account a
INDEX BY a.id
GROUP BY a.id

$results 将包含一个按名称索引的实体关联数组。要使用外键执行此操作,您可能必须先进行连接,或使用嵌套 DQL。 INDEX BY 也有可能不会按照您想要的方式工作。解决方法如下所示(包括 ID 作为关联数组的一部分而不是作为数组键):

SELECT a.id, SUM(c.visits) AS visits
FROM Customer c
LEFT JOIN c.account a
GROUP BY a.id

如果您在阅读此答案后仍然无法正常工作,我建议您提供有关实体和任何相关关系的其他信息。