I'm adding filters to my query builder but I'm getting an html 500 error when using both filters at the same time. One only one of them it works fine.
Simplified query code:
$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();
First of all you have a wrong parameter min
and minYear
.
Secondly you should use setParameter
method instead of setParameters
. setParameters
creates a new parameters collection and override existing one each time you call it. That is why:
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]);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.