2016-06-07 71 views
1

我有以下代碼重複查詢結果的原則?

$this->em = $this->container->get('doctrine.orm.entity_manager'); 


$qb = $this->em->getRepository('CoreBundle:ServiceProvider')->createQueryBuilder('c'); 
$qb->select('count(venue.id) as vencount'); 
$qb->from('CoreBundle:ServiceProvider','venue'); 

$count = $qb->getQuery()->getOneOrNullResult()['vencount']; 

這是寫其返回多個場地的,但問題是,這個數字是錯誤的,因爲在表中的ServiceProvider我只有5條記錄,但此查詢將返回25.我嘗試添加一個新的記錄,使他們有6個是的結果是36

所以我通過ID添加組,它解決了這一問題,誰能告訴我,爲什麼會出現這種情況?

回答

1

這是因爲,當你從一個存儲庫羅主義創建查詢假定它是一個選擇,並注入選擇和clausule的爲您服務。

這是你從使用getRepository方法獲得SQL:

SELECT count(i0_.id) AS sclr_0 FROM Entity i1_, Entity i0_ 

(注意:實體是兩次在FROM)。

只需使用:

$qb = $this->em->createQueryBuilder(); 
$qb->select('count(venue.id) as vencount'); 
$qb->from('CoreBundle:ServiceProvider','venue'); 

你得到:

SELECT count(i0_.id) AS sclr_0 FROM Entity i0_ 

這可能是你在找什麼。

另一種方法是從儲備庫中獲得,但與清除SQL部分:

$qb = $this->em->getRepository('CoreBundle:ServiceProvider')->createQueryBuilder('c')->resetDQLParts(); 

但是這樣你失去了在第一時間使用存儲庫的根本目的。