我有两个实体:文章和类别。这有多个表: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
答案 0 :(得分: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”是隐含的。