在Symfony2查询构建器

时间:2016-12-30 14:07:56

标签: mysql sql symfony

我正在向我的查询构建器添加过滤器,但是在同时使用这两个过滤器时我收到了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();

1 个答案:

答案 0 :(得分:2)

首先,您的参数minminYear错误。

其次,您应该使用setParameter方法而不是setParameterssetParameters创建一个新的参数集合,并在每次调用时覆盖现有的参数集合。这就是原因:

    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]);
    }