2013-02-22 2 views
0

I 교리 QueryBuilder에 다음 쿼리를 가지고 :어떻게 결과를 분리 할

$qb = $this->createQueryBuilder('e') 
      ->select('e.id, e.name, e.body, e.teaser, e.slug, e.dateBegin, e.dateEnd, e.dateTbd, v.name AS v_name') 
      ->innerJoin('e.venue', 'v') 
      ->where('v.name LIKE :TBD') 
      ->orWhere('v.name LIKE :TBA') 
      ->orWhere('e.name LIKE :TBD') 
      ->orWhere('e.name LIKE :TBA') 
      ->orWhere('e.name LIKE \'none\'') 
      ->orWhere('e.name LIKE \'n/a\'') 
      ->orWhere('e.teaser LIKE :TBD') 
      ->orWhere('e.body LIKE :TBD') 
      ->orWhere('e.dateTbd=true') 
      ->orWhere('TIME(e.dateBegin) < :earlyMorning AND TIME(e.dateBegin) > :lateNight') 
      ->setParameter('TBA', '%TBA%') 
      ->setParameter('TBD', '%TBD%') 
      ->setParameter('earlyMorning', '06:00:00') 
      ->setParameter('lateNight', '23:00:00'); 

나는이 쿼리에 '어디에'조항에 의해 결과를 분리 할 수있는 방법. where 절에 나열된 기준으로 모든 이벤트를 표시해야합니다.

답변

0

이 작업을 쉽게 수행 할 수있는 방법이 없습니다. 특히, 표준 그룹 토큰 개체를 검색하는 데이 그룹을 사용한다고 가정하면 추가 그룹화/속성이 실제로 전달할 수있는 것이 아니기 때문에 이들.

출력을 약간 다르게 표시하도록 그룹화해야하는 경우 (예 : 마크 업에서 엔티티의 클래스에 추가 메소드를 추가하여 해당 유형의 '유형'을 감지 할 수 있음) 귀하의 검색어에 정의 된 유사한 기준에 표준 문자열 일치 함수를 사용합니다.

그렇지 않으면 옵션이 컬렉션 필터링 (ArrayCollections가 쉽게 수행 할 수있는 방법을 제공합니다) 또는 여러 쿼리로 분리하는 것입니다. 이러한 접근 방식을 사용하면 피하려고합니다.