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.'%') 
; 
+0

感谢您的回答 –

试试这个:

return $this->createQueryBuilder("a") 
     ->andWhere('a.id like :id' OR 'a.client like :client') 
     ->setParameters([ 
      'id' => '%' . $filter . '%', 
      'client' => '%' . $filter . '%' 
     ]), 
     ->getQuery(); 
+0

感谢答案,但我发现解决问题的表达方式。 –

您应该使用orWhere代替andWhere

public function findFilter($filter) 
{ 
    return $this->createQueryBuilder("a") 
     ->where('a.id like :filter') 
     ->orWhere('a.client like :filter') 
     ->setParameter('filter', '%' . $filter . '%') 
     ->getQuery() 
    ; 
} 

而且你可能已经错过了getResultgetQuery后(但不知道这是否是一个错字或别的东西)

+0

感谢您的回答,但我发现更好的结果与查询表达式 –

+0

@chickenburger没有问题。我只想对此发表评论 - 对于那些会阅读这篇文章的人来说 - 这个答案和接受的答案绝对没有区别。两者都有效。接受一个是不太可读的imho,但没关系。只是想指出两者都可以接受;) – DonCallisto