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个参数,它们是:Number
和Code
。如果其中之一是 "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();
我正在构建一个 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个参数,它们是:Number
和Code
。如果其中之一是 "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();