【Symfony2/Doctrine2】Many-to-Manyのテーブルでリレーションテーブル内をカウントしたい場合。

例えば、記事とカテゴリがあって、カテゴリの数が多い順でカウント、ソートしたい場合のDQLは下記の通りになる。

$dql = "select
            c.id,
            c.name,
            count(c.id) as cnt
        from
            HogeFugaBundle:Categories as c
        join
            c.articles as a
        where
            c.status = 1
        group by
            c.id
        order by
            cnt desc
";

DQLでのjoinのやり方は面白いね。