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
如果您在阅读此答案后仍然无法正常工作,我建议您提供有关实体和任何相关关系的其他信息。
我正在尝试从 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
如果您在阅读此答案后仍然无法正常工作,我建议您提供有关实体和任何相关关系的其他信息。