2015-10-06 98 views
0

我正在构建Symfony应用程序,用户可以通过包含许多字段的搜索表单进行一些搜索。现在我的DQL查询如下所示:DQL如何在参数为空时返回所有记录

$users = $repository->createQueryBuilder('u') 
     ->addSelect('u') 
     ->from('AppBundle:User', 'b') 
     ->where('u.Number = :Number **OR u.Number = :blank'**) 
     ->andWhere('u.Code = :Code') 
     ->setParameter('Number', $Number) 
     ->setParameter('blank', $blank) 
     ->setParameter('Code', $code) 
     ->getQuery() 
     ->getResult(); 

的问题是,我希望我的请求,当用户离开一些领域的空白返回与条件的所有记录。现在没有记录被返回,因为系统认为我想要具有特定“空白”标准的条目。我会很感激任何想法。谢谢

回答

0

如果我理解正确的话,你确实有在这种情况下2个参数,它们是:NumberCode。如果其中一个是“空白”,那么你有blank变量集?

如果是这样的话,我想你应该写你的要求是这样的:

$query = $repository->createQueryBuilder('u') 
     ->addSelect('u') 
     ->from('AppBundle:User', 'b') 

if ($Number != "") 
    $query->where('u.Number = :Number') 
     ->setParameter('Number', $Number); 

if ($code != "") { 
    if ($Number != "") $query->andWhere('u.Code = :Code'); 
    else $query->where('u.Code = :Code'); 
    $query->setParameter('Code', $code); 
} 

$users = $query->getQuery()->getResult(); 
+0

)它可以工作!!如果我现在还没有2个字段,但是,比如说10个搜索字段,为了证明用户输入的每一种可能情况,我需要写10个if-else块,甚至是10 * 10个块,对吗?或者,对于这种情况,可能有任何解决方法?谢谢 – Jack

+0

如果你有多个字段,你应该把它放在一个数组中,这样你就可以用'foreach'循环替换上面的行了。 – Dric512

+0

好的建议,谢谢。有没有可能看到这样的实现的例子?我会花很多时间来通过这个))) – Jack

1

您可以在DQL中使用Expr class来进一步围绕用户提交的'空白'字段进行查询。简单if(!empty($field))会做的伎俩

$query = $repository->createQueryBuilder('u') 
    ->addSelect('u') 
    ->from('AppBundle:User', 'b') 
    ->where('u.Number = :Number') 
    ->andWhere('u.Code = :Code') 
    ->setParameter('Number', $Number)  
    ->setParameter('Code', $code); 

if(!empty($blank)){ 
    $query->andWhere($query->expr()->orX(
    $query->expr()->eq('u.Number', ':blank') 
)); 
    $query->setParameter('blank', $blank); 
} 

$users = $query->getQuery()->getResult(); 
+0

,并$空白的值应该是什么?现在我把它设置成这样:'$ blank =“”;'并且它认为我想要它的空白条目并且什么也不返回(( – Jack

相关问题