我有两个实体:文章和类别。它有很多表: 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发布于 2012-07-11 17:23:39
我想出了办法。我使用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();我认为我必须指定连接需要发生的位置(“. ON c.id = ac.category_id .”)。但是,由于数组集合(在我的例子中是“文章”)已经映射了“多对多”,所以我想"ON“是隐式的。
https://stackoverflow.com/questions/11437472
复制相似问题