DQL如何在参数为空时返回所有记录

时间:2015-10-06 12:59:57

标签: symfony dql

我正在构建一个Symfony应用程序,用户可以通过包含许多字段的搜索表单进行搜索。现在我的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();

问题是当用户将某些字段留空时,我希望我的请求返回与条件相关的所有记录。现在没有返回任何记录,因为系统认为我希望条目具有特定的“空白”标准。我很感激任何想法。谢谢

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

如果我理解正确,在这种情况下你实际上有两个参数: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();