1

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();
1
  • Might be a copy/paste typo but you have :min instead of :minYear Commented Dec 30, 2016 at 14:13

1 Answer 1

2

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]);
    }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.