簡體   English   中英

教義索引(外鍵)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM