Symfony中的多重过滤
我在我的项目中添加了一个与symfony一起使用的过滤器。Symfony中的多重过滤
我有ID(要搜索的号码)和客户端名称。 当我建立我的查询带有一个参数,它的工作原理,就是这样
public function findFilter($filter)
{
return $this->createQueryBuilder("a")
->andWhere('a.id like :id')
->setParameter('id', '%' . $filter . '%')
->getQuery()
;
}
,当我加入一个参数,搜索不会发生。
public function findFilter($filter)
{
return $this->createQueryBuilder("a")
->andWhere('a.id like :id')
->setParameter('id', '%' . $filter . '%')
->andWhere('a.client like :client')
->setParameter('client', '%' . $filter . '%')
->getQuery()
;
}
,这里是我的看法,其中过滤器可输入
<form action="" method="get">
<input name="filter" type="text">
<button type="submit" class="btn btn-default">Filtrer</button>
</form>
所以也许我不会坚持他们的权利? 任何人都知道如何添加更多的过滤器参数?
如果你想在多个列过滤器的独特价值,你使用的OR
滤光器阵列。
use Doctrine\ORM\Query\Expr;
[...]
$orX = new Expr\Orx();
$orX->add($qb->expr()->orx($qb->expr()->like('a.id', ':filter'));
$orX->add($qb->expr()->orx($qb->expr()->like('a.client', ':filter'));
$qb
->andWhere($orx)
->setParameter('filter', '%'.$filter.'%')
;
试试这个:
return $this->createQueryBuilder("a")
->andWhere('a.id like :id' OR 'a.client like :client')
->setParameters([
'id' => '%' . $filter . '%',
'client' => '%' . $filter . '%'
]),
->getQuery();
感谢答案,但我发现解决问题的表达方式。 –
您应该使用orWhere
代替andWhere
public function findFilter($filter)
{
return $this->createQueryBuilder("a")
->where('a.id like :filter')
->orWhere('a.client like :filter')
->setParameter('filter', '%' . $filter . '%')
->getQuery()
;
}
而且你可能已经错过了getResult
getQuery
后(但不知道这是否是一个错字或别的东西)
感谢您的回答,但我发现更好的结果与查询表达式 –
@chickenburger没有问题。我只想对此发表评论 - 对于那些会阅读这篇文章的人来说 - 这个答案和接受的答案绝对没有区别。两者都有效。接受一个是不太可读的imho,但没关系。只是想指出两者都可以接受;) – DonCallisto
感谢您的回答 –