2014-09-03 17 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; 
} 

但這不工作 - 對象不是空的,但沒有數據。爲什麼?在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 2014-09-03 18:29:45

+0

hehe是的,這是真的:) – takeit 2014-09-03 18:32:14