2014-02-25 17 views
0

我有一個SQL查詢:Symfony的轉換本地SQL查詢建設者

SELECT users.username, count(follows.user_id) 
FROM follows 
INNER JOIN users ON follows.follow_user_id=users.id 
GROUP BY follow_user_id; 

奏鳴曲聯繫,我想與追隨者的數量來篩選我的數據。 該請求有效,但我無法在Sonata Admin中使用它。

我具備的功能:

public function callbackFilterFollow($queryBuilder, $alias, $field, $value) 
{ 
    if (!$value) { 
     return; 
    } 
    //$queryBuilder->select('username')->addGroupBy('o.id'); 
    return true; 
} 

我無法弄清楚如何使用查詢生成器來我的SQL查詢轉換。

+0

到目前爲止您嘗試了什麼?你目前的查詢生成器是怎樣的? – nifr

+0

我嘗試逐步構建我的查詢。目前我有$ queryBuilder-> from('follow','f') - > select('COUNT(f.user_id)'); 但Symfony說下面的類沒有定義。遵循不是一個實體。 – Sancho

+0

我嘗試:$ queryBuilder-> innerJoin('o.followings','f') - > andWhere('user_id =:id') - > setParameter('id',1); 但無效><' – Sancho

回答

0

您是否將查詢表映射到實體? 如果不看看學說documentation for oneToMany relationships

一旦你完成了,你可以做這樣的事情,請記住使用你的對象字段,而不是像表字段名稱下面!

$qb->select('u.username, COUNT(f.user_id) as cnt') 
     ->from('UserBundle:Follows' , 'f') //this is your entity 
     ->leftJoin('UserBundle:Users','u') //your users entity 
     ->groupBy('f.follow_user_id') 
     ->getQuery() 
     ->getOneOrNullResult(); 

您的實體可能需要具有完整路徑。然而,有兩件事我不知道你在做什麼。

  1. 如果你只是選擇COUNT(*)與你不需要組合的內部連接,你正在計算內部連接。
  2. 您正在創建一個奏鳴曲過濾器,但我沒有看到您使用參數的位置,我假設您的真實查詢看起來不同並且具有作爲參數某處的值。 所以你可能需要一些改變,你可以找到更多的信息on this other post