2011-12-16 12 views
4

に参加する2エンティティ:DQLの参加テーブルとクエリと2は、私が持っている

:私はこのようなSQLを結果DQLクエリを作成する方法を見つけるカント
/** 
* @ORM\Entity(repositoryClass="Myapp\UserBundle\Repository\GroupRepository") 
* @ORM\Table(name="groups") 
*/ 
class Group 
    ... 

/** 
* @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; 

    ... 
} 

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 

私は試して失敗したwhith:

結果がユーザを持たないグループを含まないため、

が含まれています。

答えて

2

これはManyToMany関係ですが、関係テーブルに参加しようとしませんでした。関連するエンティティのみ... SQL照会の場合は、右ジョイン...と正しいですが、Doctrineは自動的にFROM句の関節タイプ。 DQLで

、唯一の定義された関係はjointuresによって管理されているので、あなたが使用することを必要とするか、または句ONしていない...

何これは?

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

これは、ユーザーがいるそのグループのみを返します。しかし、私は空のグループも必要です。カウント0 – user1063963

+0

Humm ... FROMとJOINテーブルを反転して更新しました。 – AlterPHP

関連する問題