2011-12-16 57 views
4

我有2個實體:DQL查詢與加盟桌子和兩個連接

/** 
* @ORM\Entity 
* @ORM\Table(name="users") 
*/ 
class User 
{ 
    /** 
    * @ORM\ManyToMany(targetEntity="Myapp\UserBundle\Entity\Group") 
    * @ORM\JoinTable(name="user_groups", 
    *  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} 
    *) 
    */ 
    protected $groups; 

    ... 
} 

/** 
* @ORM\Entity(repositoryClass="Myapp\UserBundle\Repository\GroupRepository") 
* @ORM\Table(name="groups") 
*/ 
class Group 
    ... 

我不能找到一種方法來創建一個DQL查詢導致SQL這樣的:

SELECT g.name, g.id, count(u.id) 
FROM users u 
LEFT JOIN user_groups ug ON u.id = ug.user_id 
RIGHT JOIN groups g ON g.id = ug.group_id 
GROUP BY g.id 

我試過了,失敗了:

$this->getEntityManager() 
    ->createQuery(' 
     SELECT g.id, g.name, count(u.id) as usercount FROM MyappUserBundle:User u 
     JOIN u.groups g 
     GROUP BY g.id' 
    ); 

由於結果不包含沒有用戶的組。

回答

2

這是一個ManyToMany關係,不要事件試圖加入關係表,只有相關實體... 然後,你是正確的RIGHT JOIN ...對於SQL查詢,但Doctrine自動定義FROM子句中的聯合類型。

在DQL,只定義了關係由jointures管理,所以你不需要用或者條款...

這件怎麼樣?

SELECT g.name, g.id, count(u.id) 
FROM groups g 
JOIN users u 
GROUP BY g.id 
+0

它只讓我回到那個有用戶的羣組。但我也需要空組,以及計數0 – user1063963 2011-12-16 16:11:45