Php Symfony中的多重滤波
我在我的项目中添加了一个使用symfony的过滤器 我有ID(要搜索的号码)和客户名称。 当我用一个参数构造查询时,它就工作了,就像那样Php Symfony中的多重滤波,php,symfony,filter,doctrine-orm,doctrine,Php,Symfony,Filter,Doctrine Orm,Doctrine,我在我的项目中添加了一个使用symfony的过滤器 我有ID(要搜索的号码)和客户名称。 当我用一个参数构造查询时,它就工作了,就像那样 public function findFilter($filter) { return $this->createQueryBuilder("a") ->andWhere('a.id like :id') ->setParameter('id', '%' . $filt
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>
过滤器
所以也许我没把它们粘对?
有人知道如何为过滤条添加更多参数吗?试试这个:
return $this->createQueryBuilder("a")
->andWhere('a.id like :id' OR 'a.client like :client')
->setParameters([
'id' => '%' . $filter . '%',
'client' => '%' . $filter . '%'
]),
->getQuery();
如果要对具有唯一值的多列进行筛选,则必须使用
或筛选器数组
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.'%')
;
您应该使用或where
而不是和where
public function findFilter($filter)
{
return $this->createQueryBuilder("a")
->where('a.id like :filter')
->orWhere('a.client like :filter')
->setParameter('filter', '%' . $filter . '%')
->getQuery()
;
}
此外,您可能错过了getResult
之后的getQuery
(但不知道是打字错误还是其他原因)谢谢您的回答谢谢您的回答,但我发现查询的结果更好expression@chickenburger没问题。我只是想对这一点发表评论——对于那些会读到这篇文章的人来说——这个答案和公认的答案之间没有任何区别。两者都有效。接受一个是不太可读的imho,但它是好的。只是想指出两者都是可以接受的;)谢谢你的回答,但我发现我的表情解决了这个问题。