Symfony 2, как можно использовать проверку внутри QueryBuilder-а?

В репозиторий могут приходить две переменных, искомый текст ($search) и дополнительное условие ($country).

Нужно: Если переменная есть, добавить дополнительное условие, если нету, QueryBuilder использует только стандартный запрос.

public function findByPersonAction($search, $country)
    {       
        $query = $this->getEntityManager()
            ->createQueryBuilder('p')
            ->select('p')
            ->from('DroidUserBundle:Person', 'pi')
            ->leftJoin('DroidUserBundle:PersonaAddress', 'c', 'WITH', 'p.person_id = c.person_id')
            ->where('lower(p.firstname) LIKE lower(:search)')

            if($country != NULL)
             { $query->andWhere('c.country_id = :country')
                          ->setParameter('country', $country)
             }

            ->setParameter('search', '%'.$search.'%')
            ->getQuery();
  
        $result = $query->getResult();
        
        return $result;
    }


Я реализовал это таким подходом. Выдает Fatal error синтаксическую ошибку if либо ругается на { }
Что делаю не так?
  • Вопрос задан
  • 314 просмотров
Решения вопроса 2
slimus
@slimus
Symfony, Golang
у вас синтаксическая ошибка.
нет ; после ->where('lower(p.firstname) LIKE lower(:search)')
и не понятно к чему эта строка ->setParameter('search', '%'.$search.'%')
Ответ написан
HanDroid
@HanDroid Автор вопроса
Решение ситуации таково:
Точку с запятой до цикла, внутри цикла после запроса и продолжение запроса начинать с $query->
->where('lower(p.firstname) LIKE lower(:search)');
        if($country != NULL){
            $query->andWhere('c.country_id = :country')->setParameter('country', $country);
           }
            $query->setParameter('search', '%'.$search.'%')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ivanq
@Ivanq
Знаю php, js, html, css
У вас до скобки не стоит ; и перевод строки перед -> лишний.
И все равно - будет Fatal Error. Нужно сверху вместо
public function findByPersonAction($search, $country)
подставить
public function findByPersonAction($search, $country=null)
. Этим мы ставим значение по умолчанию. Без этого будет ошибка неверное количество параметров функции
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы