我在我的项目中添加了一个与symfony一起使用的过滤器。
我有ID(要搜索的号码)和客户名称。 当我用一个参数构造我的查询时,它就像那样
def date_of_the_task():
print("Date of the task")
print("Please use DD/MM/YYYY format:")
task_date = input("> ")
try:
datetime.datetime.strptime(task_date, '%d/%m/%Y')
except ValueError:
print("Incorrect data format, should be DD/MM/YYYY!")
input("Press enter to continue")
date_of_the_task()
return task_date
当我再添加一个参数时,搜索不会发生。
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()
;
}
所以也许我没有把它们坚持下去? 有人知道如何为过滤条添加更多参数吗?
答案 0 :(得分:4)
试试这个:
return $this->createQueryBuilder("a")
->andWhere('a.id like :id' OR 'a.client like :client')
->setParameters([
'id' => '%' . $filter . '%',
'client' => '%' . $filter . '%'
]),
->getQuery();
答案 1 :(得分:3)
如果您要使用唯一值过滤多个列,则必须使用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.'%')
;
答案 2 :(得分:3)
您应该使用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
(但不知道这是否是拼写错误或其他内容)