2013-11-26 86 views
3

我想在一個DQL查詢中使用Doctrine2 ORM做多個計數。如何使用Doctrine @ ORM在一個DQL查詢中執行多次計數?

這裏是我的查詢看起來是這樣的:

$em = $this->getDoctrine()->getManager(); 
$query = $em->createQuery(' 

SELECT  COUNT(u.id) AS users, 
      COUNT(t.id) AS teams, 
      COUNT(p.id) AS posts, 
      COUNT(c.id) AS comments 
    FROM ProjectUserBundle:User u, 
      ProjectTeamBundle:Team t, 
      ProjectPostBundle:Post p, 
      ProjectCommentBundle:Comment c, 
      '); 
$counts = $query->getSingleResult(); 

它返回我下面的結果: { 「用戶」: 「2648940」, 「團隊」: 「2648940」, 「上崗」:「2648940 「,」評論「:」2648940「}

它必須是這樣的: {」users「:」17「,」teams「:」5「,」posts「:」190「,」comments「: 「321」}

有人可以告訴我我在哪裏做錯了嗎?

回答

3

在您的查詢中,DQL將混合表格而不是對每個表格中的行進行計數。結果是錯誤的行數。它無法解釋爲什麼以及如何,但是當我在查詢中使用多個COUNT()函數時,它總是失敗。

要計算的行權數量,你必須使用子查詢:

$em = $this->getDoctrine()->getManager(); 
$query = $em->createQuery(' 

SELECT  COUNT(U.id) AS users, 
      (SELECT COUNT(T) FROM ProjectUserBundle:Team T) AS teams, 
      (SELECT COUNT(P) FROM ProjectUserBundle:Post P) AS posts, 
      (SELECT COUNT(C) FROM ProjectUserBundle:Comment C) AS comments 
    FROM ProjectUserBundle:User U 
      '); 

$counts = $query->getSingleResult(); 
+1

謝謝你,你真棒! – lokiloq

+0

不客氣。 :) –

相關問題