2011-09-12 81 views
2

如果参数没有值,我该怎么办?doctrine2 - querybuilder,空参数

我的查询:

$query = $this->_em->createQueryBuilder() 
        ->select('u') 
        ->from('Users', 'u') 
        ->where('u.id = ?1')     
        ->andWhere('u.status= ?2') 
        ->setParameter(1, $userid) 
        ->setParameter(2, $status) 
        ->getQuery(); 

return $query->getResult(); 

,如果世界上没有$状态,那么它不显示任何内容。

我试图把一个条件查询前要检查其空,但什么样的价值我可以设置$状态IIF世界上没有状态设置

回答

9

的查询生成器是完全有建设条件查询。你可以这样做:

$qb = $this->_em->createQueryBuilder(); 

$query = $qb->select('u') 
      ->from('Users', 'u') 
      ->where('u.id = ?1')     
      ->setParameter(1, $userid); 

if ($status) { 
    $qb->andWhere('u.status = ?2') 
     ->setParameter(2, $status); 
} 

return $qb->getQuery()->getResult(); 

在附注中,最好使用命名占位符e。 G。像这样:

$qb->andWhere('u.status = :status') 
     ->setParameter('status', $status); 
+0

上指定的占位符+1 – kmfk

1

你可以写:

->andWhere('(u.status= ?2 or ?2 is null)') 
+0

聪明的解决方案,但最多的答案是更清洁和更面向对象路。无论如何,但是聪明+1。 –

+0

@Benjamin:谢谢。我更像是一种SQL类型的人:-)但是,或许,Max的解决方案的执行计划无论如何都是更好的 –