2013-01-24 3 views
0

내가 이렇게 내 DB에 쿼리를 생성하는 기능이 있습니다Symfony2 + 교리의 쿼리 빌더 - 어디 = 1

public function getList($u, $t, $ls, $lf) { 
     return $this->getEntityManager() 
      ->createQuery(' 
        SELECT 
         o, 
         u, 
         g, 
         r, 
         t, 
         p 
        FROM GameShelfUsersBundle:Own o 
        LEFT JOIN o.user u 
        LEFT JOIN o.game g 
        LEFT JOIN o.rate r 
        LEFT JOIN o.typo t 
        LEFT JOIN o.platforms p 
        WHERE u.id = :user 
        AND o.typo = :type 
        ORDER BY o.updated DESC 
       ') 
      ->setParameters(array(
      'user' => $u, 
      'type' => $t 
      )) 
      ->setMaxResults($lf) 
      ->setFirstResult($ls) 
      ->getResult(); 
    } 

내 문제는 어떻게 not in을 할 :type을 설정하는 것입니다!? 내 말은, 나는 이것을 다음과 같이 사용하고 싶었다.

$type = '!= 1' 
... 
AND o.typo :type 
... 
'type' => $type 

그러나 전혀 작동하지 않았다. $type = -1을 사용하면 도움이되지 않습니다. if/else 문 작성 및 쿼리 복제 이외의 다른 방법이 있습니까?

답변

1

query builder ??

이렇게하면 일부 조건에 따라 쉽게 쿼리를 사용자 지정할 수 있습니다.

$q = $this 
     ->createQueryBuilder('foo') 
     ->select('foo') 
     ->leftJoin('foo.bar', 'foobar') 
     ->leftJoin('foobar.bar', 'foobarbar') 
     ; 
if($myVar > 0) 
{ 
$q->where('foobarbar.var = :myVar'); 
} 
else 
{ 
$q->where('foobarbar.var = :staticValue'); 
} 
[...] 

쿼리 time`이 3.08 밀리이었다 '내 쿼리를 사용하는 동안 말

+0

에서 return $q->getResult(); 전화를 기억

은 예입니다. 쿼리 작성기로 빌드 된 동일한 쿼리를 사용하는 동안 '쿼리 시간'은 9 밀리 초를 넘습니다. 그리고 그것은 더미 데이터에만 있습니다. –

+0

@TomekBuszewski : if ... then ... else 문 ("코드"의 중복 부분없이)을 기반으로하는 동적 방식으로 쿼리를 작성하려는 경우 이것이 유일한 방법입니다 – DonCallisto

+0

추신 : You don "가장 빠른"방법을 요구하지 마라. – DonCallisto