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 ...”)。但是,由于多对多已经被数组集合(在我的情况下是“文章”)映射到我的“类别”实体中,我猜“ON”是隐含的。

于 2012-07-11T17:23:39.487 回答