简体   繁体   中英

Using multiple ->setParameters in Symfony2 Query builder

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM