DQL参数为空时如何return所有记录

DQL How to return all records when parameter is empty

我正在构建一个 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();

问题是当用户将某些字段留空时,我希望我请求 return 与条件相关的所有记录。现在没有记录被 return 编辑,因为系统认为我想要具有特定 "blank" 标准的条目。我将不胜感激任何想法。谢谢

您可以在 DQL 中使用 Expr class 来进一步围绕用户提交的 'blank' 字段构建查询。简单 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();

如果我没理解错的话,在这种情况下你实际上有2个参数,它们是:NumberCode。如果其中之一是 "blank",那么您设置了 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();