Argenit Ltd
Argenit Ltd

Reputation: 79

Doctrine where if empty

 $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();

I am trying to filter search. How can i check if parameter is empty, don' t add to where query ?

I followed this link : doctrine2 - querybuilder, empty parameters

But i doesn't works for me.

When i try to like that, i got an error :

Undefined method 'setFirstResult'. The method name must start with either findBy or findOneBy!

Thanks in advice..

Update

if i add to command line setFirstResult error change :

Undefined method 'getQuery'. The method name must start with either findBy or findOneBy!

When i used to use pdo, i can like this using bind parameters. But i don't know how to do in Doctrine.

Upvotes: 1

Views: 1617

Answers (1)

Mateusz Woźniak
Mateusz Woźniak

Reputation: 1499

You should keep using $holiday_packages instead of $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();

Upvotes: 2

Related Questions