IT TIP

symfony2 doctrine query Builder를 사용하여 고유 한 쿼리를 선택하는 방법은 무엇입니까?

itqueen 2020. 10. 30. 21:20
반응형

symfony2 doctrine query Builder를 사용하여 고유 한 쿼리를 선택하는 방법은 무엇입니까?


내 프로젝트의 블로그 섹션과 관련된 모든 범주를 검색하는이 심포니 코드가 있습니다.

$category = $catrep->createQueryBuilder('cc')
    ->Where('cc.contenttype = :type')
    ->setParameter('type', 'blogarticle')
    ->getQuery();

$categories = $category->getResult();

이것은 작동하지만 쿼리에는 중복이 포함됩니다.

Test Content
Business
Test Content

DISTINCT내 쿼리 에서 명령 을 사용하고 싶습니다 . 내가 본 유일한 예에서는 원시 SQL을 작성해야합니다. 모든 코드를 동일하게 유지하여 Symfony2 / Doctrine에서 제공하는 QueryBuilder 기능을 모두 사용하므로 가능한 한 이것을 피하고 싶습니다.

distinct()다음과 같이 내 쿼리에 추가하려고 했습니다.

$category = $catrep->createQueryBuilder('cc')
    ->Where('cc.contenttype = :type')
    ->setParameter('type', 'blogarticle')
    ->distinct('cc.categoryid')
    ->getQuery();

$categories = $category->getResult();

그러나 다음과 같은 오류가 발생합니다.

치명적인 오류 : 정의되지 않은 메서드 Doctrine \ ORM \ QueryBuilder :: distinct () 호출

Symfony에게 구별을 선택하도록 어떻게 지시합니까?


당신은 쓸 수 있습니다

select DISTINCT f from t;

같이

select f from t group by f;

문제는, 저는 현재 제 자신이 교리에 들어가 있기 때문에 여러분에게 진정한 답을 줄 수는 없습니다. 그러나 위에 표시된대로 그룹 별 구별을 시뮬레이션하고 이를 교리 로 변환 할 수 있습니다. 더 많은 필터링을 추가하려면 HAVING그룹별로 사용하십시오.


이것은 작동합니다 :

$category = $catrep->createQueryBuilder('cc')
        ->select('cc.categoryid')
        ->where('cc.contenttype = :type')
        ->setParameter('type', 'blogarticle')
        ->distinct()
        ->getQuery();

$categories = $category->getResult();

"select ()"문을 사용하면 다음과 같이 할 수 있습니다.

$category = $catrep->createQueryBuilder('cc')
    ->select('DISTINCT cc.contenttype')
    ->Where('cc.contenttype = :type')
    ->setParameter('type', 'blogarticle')
    ->getQuery();

$categories = $category->getResult();

참고 URL : https://stackoverflow.com/questions/7188219/how-to-select-distinct-query-using-symfony2-doctrine-query-builder

반응형