我正在向我的查询构建器添加过滤器,但是在同时使用这两个过滤器时我收到了html 500错误。其中只有一个它工作正常。
简化查询代码:
$query = $this->createQueryBuilder('a')
->select('a.id')
->where('a.active = 1');
if($year) {
$year = explode('-', $year);
$query->andWhere('a.minYear >= :min AND a.year <= :maxYear')
->setParameters(array('minYear'=> $year[0], 'maxYear' => $year[1]));
}
if($hours) {
$hours = explode('-', $hours);
$query->andWhere('a.hours >= :minHours AND a.hours <= :maxHours')
->setParameters(array('minHours'=> $hours[0], 'maxHours' => $hours[1]));
}
return $query->getQuery()->getResult();
答案 0 :(得分:2)
首先,您的参数min
和minYear
错误。
其次,您应该使用setParameter
方法而不是setParameters
。 setParameters
创建一个新的参数集合,并在每次调用时覆盖现有的参数集合。这就是原因:
if($year) {
$year = explode('-', $year);
$query->andWhere('a.minYear >= :minYear AND a.year <= :maxYear')
->setParameter('minYear', $year[0])
->setParameter('maxYear', $year[1]);
}
if($hours) {
$hours = explode('-', $hours);
$query->andWhere('a.hours >= :minHours AND a.hours <= :maxHours')
->setParameter('minHours', $hours[0])
->setParameter('maxHours', $hours[1]);
}