2014-09-03 3 views
0

컨트롤러에서 쿼리를 나누는 방법은 무엇입니까?컨트롤러에서 쿼리를 나누는 방법은 무엇입니까?

나는이 :

private function getPeoples($andWhere = null) 
{ 
    $peoples = $this->getDoctrine() 
        ->getRepository('AcmeDemoBundle:People') 
        ->createQueryBuilder('p') 
        ->getQuery() 
        ->getResult(); 

    return $peoples; 
} 

이 확인 작업,하지만 난이 IF 및 andWhere에 대한 추가 싶습니다

private function getPeoples($andWhere = null) 
{ 
    $peoples = $this->getDoctrine() 
        ->getRepository('AcmeDemoBundle:People') 
        ->createQueryBuilder('p'); 
       if($andWhere == true){ 
        $peoples->andWhere('p.test > 5'); 
       } 

        $peoples->getQuery() 
        ->getResult(); 

    return $peoples; 
} 

을하지만이 작동하지 않습니다 - 객체가 null이 아니라이없는 데이터를 . 왜? Symfony 1에서이 작업. Symfony2에서 어떻게 만들 수 있습니까? 여기

답변

1

당신은 이동 : 그런데

$queryBuilder = $this->getDoctrine()->getManager()->createQueryBuilder(); 

$peopleQuery = $queryBuilder 
    ->select('p') 
    ->from('AcmeDemoBundle:People', 'p'); 

if ($andWhere === true) { 
    $peopleQuery->andWhere('p.test > ?1'); 
    $peopleQuery->setParameter(1, 5); 
} 

$people = $peopleQuery->getQuery()->getResult(); 

는하는 DQL 쿼리에 리터럴 값을 삽입하지 마십시오 위에서 볼 수 있듯이, setParameter()과 함께 위치 매개 변수를 사용합니다.

1

글쎄, 당신은 같이해야합니다 :

private function getPeople($andWhere = null) 
{ 
    $qb = $this->getDoctrine()->getManager()->getRepository('AcmeDemoBundle:People') 
     ->createQueryBuilder('p'); 

    if($andWhere == true) { 
     $qb->where('p.test > ?1') 
      ->setParameter(1, 5) 
    } 

    $people = $qb->getQuery()->getResult(); 

    return $people; 
} 
+0

하하, 나는 조금 더 빨랐다. ;) – lxg

+0

hehe 예, 그게 사실이야 :) – takeit

관련 문제