我正在尝试获取article_stats表中使用文章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)')
,但这也无效。
那么如何从外键索引的数据库中选择数据呢?
答案 0 :(得分:3)
如果没有看到实体的确切构成及其关系,很难给出准确的答案。即便如此,如果ass.article
是实体,而不是数字文章ID,则查询将不起作用。 INDEX BY
必须与ORM列一起使用。
下面列出了一个例子:
<?php
$query = $em->createQuery('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 = $query->getResult();
$results
将包含按名称索引的实体的关联数组。要使用外键执行此操作,您可能必须先进行连接,或使用嵌套的DQL。 INDEX BY
也可能无法以您想要的方式运行。解决方法看起来像这样(包括ID作为关联数组的一部分而不是数组键):
<?php
$dql = 'SELECT a.id, SUM(c.visits) AS visits FROM Customer c LEFT JOIN c.account a GROUP BY a.id';
如果您在阅读完该答案后仍然无法正常工作,我建议您提供有关实体和任何相关关系的其他信息。
答案 1 :(得分:-1)
试试这样:
$qb = $em->createQueryBuilder();
$qb->select('SUM(ass.pageviews)')
->from('YourBundle:article_stats', 'ass', 'ass.article')
->groupBy('ass.article');
$articleStats = $qb->getQuery()->getArrayResult();