2

ArticleとCategoryの2つのエンティティがあります。それには多対多のテーブルがあります:article_category。

MySQLでは問題なくこのクエリを実行できます。

SELECT COUNT(*) cnt, c.id, c.name FROM article_category ac, category c WHERE ac.category_id = c.id GROUP BY c.id ORDER BY cnt DESC

しかし、それをDoctrine2クエリに変換するのに問題があります。以下は、article_categoryテーブルを参照して、クラスが存在しないというエラーを返します。

[...]
createQuery("SELECT COUNT(*) cnt, c.id, c.name FROM article_category ac, category c WHERE ac.category_id = c.id GROUP BY c.id ORDER BY cnt DESC")
[...]

具体的に言うと、私の問題は、多対多のテーブルの「category_id」にアクセスする方法がわからないことです。

編集

これは、内部結合を使用した同じクエリです(簡単になる場合)。

SELECT COUNT(*) cnt, c.id, c.name FROM category c INNER JOIN article_category ac ON c.id = ac.category_id GROUP BY c.id ORDER BY cnt DESC
4

1 に答える 1

4

私はそれを理解することができました。DQLを使用してクエリを作成しました。

    $qb = $this->getEntityManager()->createQueryBuilder();
    $qb->select('COUNT(c) cnt, c.id, c.name')
    ->from('NatknowEditorBundle:Category', 'c')
    ->innerJoin('c.articles', 'ac')
    ->groupBy('c.id')
    ->orderBy('cnt', 'DESC');

    return $qb->getQuery()->getResult();

JOINを発生させる必要がある場所を指定する必要があると思いました( "... ON c.id = ac.category_id ...")。ただし、多対多はすでに「Category」エンティティにある配列コレクション(私の場合は「articles」)によってマップされているため、「ON」は暗黙的であると思います。

于 2012-07-11T17:23:39.487 に答える