私はDoctrineでSymfony2を使用しており、2つのエンティティが多対多の関連付けに参加しています。UserとGroupの2つのエンティティがあり、dbの関連テーブルはusers、groups、users_groupsであるとします。
DQLで最も人口の多い上位10のグループを取得したいのですが、結合テーブル(users_groups)でクエリを実行するための構文がわかりません。Doctrineのマニュアルをすでに調べましたが、解決策が見つかりませんでした。DQLについて学ぶことはまだたくさんあると思います。
プレーンSQLでは次のようになります。
select distinct group_id, count(*) as cnt from users_groups group by group_id order by cnt desc limit 10
これをDQLに変換するのを手伝ってもらえますか?
更新(クラス):
/**
* Entity\E_User
*
* @ORM\Table(name="users")
* @ORM\Entity
*/
class E_User
{
/**
* @ORM\ManyToMany(targetEntity="E_Group", cascade={"persist"})
* @ORM\JoinTable(name="users_groups",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="cascade")},
* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id", onDelete="cascade")}
* )
*/
protected $groups;
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $name
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/* ... other attributes & getters and setters ...*/
}
/**
* Entity\E_Group
*
* @ORM\Table(name="groups")
* @ORM\Entity
*/
class E_Group
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $name
*
* @ORM\Column(name="text", type="string", length=255)
*/
private $name;
/* ... other attributes & getters and setters ...*/
}