我正在构建一个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();
问题是当用户将某些字段留空时,我希望我的请求返回与条件相关的所有记录。现在没有返回任何记录,因为系统认为我希望条目具有特定的“空白”标准。我很感激任何想法。谢谢
答案 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)
如果我理解正确,在这种情况下你实际上有两个参数:Number
和Code
。如果其中一个是"空白",那么你设置了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();