[英]Doctrine INDEX BY foreign key
我正在嘗試從帶有文章ID的article_stats表中獲取文章的摘要數據。
查詢生成器如下所示:
$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)')
但是那也不起作用。
那么如何從外鍵索引的數據庫中選擇數據呢?
沒有看到實體及其關系的確切構成,很難給出准確的答案。 即使是這樣,如果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';
如果您在閱讀完此答案后仍無法解決問題,建議您提供有關實體和任何相關關系的更多信息。
嘗試這樣:
$qb = $em->createQueryBuilder();
$qb->select('SUM(ass.pageviews)')
->from('YourBundle:article_stats', 'ass', 'ass.article')
->groupBy('ass.article');
$articleStats = $qb->getQuery()->getArrayResult();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.