2017-01-18 3 views
1
$repository = $this->getEntityManager()->getRepository('App\Entity\HolidayPackages'); 

$holiday_packages = $repository 
      ->createQueryBuilder('hp') 
      ->addSelect('hpt') 
      ->innerJoin('hp.holiday_packages_translation', 'hpt') 
      ->where('hpt.code = :code') 
      ->setParameter('code', $language_code) 
      ->andWhere('hpt.title LIKE :title') 
      ->setParameter('title', $title . '%'); 

     if (!empty($starting_date)) { 
      $repository 
       ->andWhere('hp.starting_date = :starting_date') 
       ->setParameter('starting_date', $starting_date); 
     } 

     $repository 
      ->setFirstResult($offset) 
      ->setMaxResults($limit) 
      ->getQuery() 
      ->getResult(); 

Я пытаюсь отфильтровать поиск. Как я могу проверить, пуст ли параметр, не добавляйте туда запрос?Доктрина, где, если пусто

Я следовал этой ссылке: doctrine2 - querybuilder, empty parameters

Но я не работает для меня.

Когда я пытаюсь как то, я получил сообщение об ошибке:

Неопределенный метод 'setFirstResult'. Имя метода должно начинаться с findBy или findOneBy!

Спасибо совет ..

Update

если добавить в командную строку setFirstResult изменения ошибки:

Undefined метод 'GetQuery'. Имя метода должно начинаться с findBy или findOneBy!

Когда я использовал pdo, мне это может понравиться с использованием параметров привязки. Но я не знаю, как это сделать в Доктрине.

+1

Это довольно простая ошибка. Спросите себя, что делает $ holiday_packages = $ repository-> createQueryBuilder ('hp'), и проблема будет очевидна. – Cerad

+0

@Cerad, можете ли вы рассказать мне больше об этом довольно простой ошибке? Я действительно не могу понять, в чем проблема: – Ozgun

+1

Что означает @Cerad, так это то, что вы должны использовать $ holiday_packages вместо $ repository во втором и третьем блоках кода, и ваша проблема будет решена. – OlivierC

ответ

2

Вы должны продолжать использовать $holiday_packages вместо $repository.

$repository = $this->getEntityManager()->getRepository('App\Entity\HolidayPackages'); 

$holiday_packages = $repository 
        ->createQueryBuilder('hp') 
        ->addSelect('hpt') 
        ->innerJoin('hp.holiday_packages_translation', 'hpt') 
        ->where('hpt.code = :code') 
        ->setParameter('code', $language_code) 
        ->andWhere('hpt.title LIKE :title') 
        ->setParameter('title', $title . '%'); 

if (!empty($starting_date)) { 

    $holiday_packages->andWhere('hp.starting_date = :starting_date') 
         ->setParameter('starting_date', $starting_date); 
} 

$holiday_packages->setFirstResult($offset) 
       ->setMaxResults($limit) 
       ->getQuery() 
       ->getResult();