2012-07-11 2 views
2

두 개의 엔터티가 있습니다 : Article 및 Category. 그 테이블에는 many to many 테이블이 있습니다 : article_category.doctrine 일치/id에 합류 많은 테이블을 쿼리하는 방법

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 쿼리에 그 번역을 데 :

나는 MySQL은 아무런 문제없이이 쿼리를 수행 할 수 있습니다. 다음은 article_category 테이블을 참조하여 class does not exist 오류를 반환합니다.

[...] 
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"에 액세스하는 방법을 모르겠다는 것입니다.

EDIT 여기

는 (그것이 더 쉽게 경우) 내부 조인하여 동일한 질의이다.

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

나는 그것을 알아 냈다. 내가 쿼리 생성 DQL을 사용 : 나는 내가이 발생하는 데 필요한 JOIN 위치를 지정 있다고 생각

$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 ..."). 그러나 many-to-many는 배열 콜렉션 (내 경우에는 "articles")에 이미 매핑되어 있으므로 "Category"엔티티에 "ON"이 함축되어 있다고 생각합니다.

+0

안녕하십니까. 귀하의 검색어로 교차 결합 (카 티지 제품)이 생성되지 않았습니까? – danielperaza

관련 문제