2012-08-15 84 views
2

我有这个疑问我怎么可以把条件学说查询生成器

$qb->select('u') 
      ->from('UserBundle:User', 'u') 
      ->where('u.location = :identifier') 
      ->orderBy('u.firstName', 'ASC') 
      ->setParameter('identifier', 2); 

我想,如果$标识符存在,那么它应该否则过滤结果我得到的所有结果就像

$qb->select('u') 
       ->from('UserBundle:User', 'u') 
         if($identifier)    
         ->where('u.location = :identifier') 
       ->orderBy('u.firstName', 'ASC') 
         if($identifier) 
       ->setParameter('identifier', 2); 

是否可能

回答

6

这是可能的,你只需要重构你的代码。

$qb->select('u') 
      ->from('UserBundle:User', 'u') 
      ->orderBy('u.firstName', 'ASC'); 
if($identifier) { 
     $qb->where('u.location = :identifier') 
      ->setParameter('identifier', 2); 
} 
+0

是不是应该来到底排序依据,也可以来之前where子句 – user825904 2012-08-15 11:09:00

+0

这是查询生成器之美:到'getQuery()'被调用,您可以修改任意顺序查询你喜欢。 – chiborg 2012-08-15 11:29:58

+0

感谢哥们,那太棒了 – user825904 2012-08-16 00:14:54