如果空的话

时间:2017-01-18 16:53:27

标签: php symfony doctrine-orm

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

我正在尝试过滤搜索。我怎样才能检查参数是否为空,不要“ t添加到查询的位置?

我点了这个链接:doctrine2 - querybuilder, empty parameters

但我不适合我。

当我尝试这样的时候,我收到了一个错误:

  

未定义的方法' setFirstResult'。方法名称必须以findBy或findOneBy!

开头

感谢您的建议..

更新

如果我添加到命令行setFirstResult错误更改:

  

未定义的方法' getQuery'。方法名称必须以findBy或findOneBy!

开头

当我以前使用pdo时,我可以使用绑定参数。但我不知道如何在Doctrine中做。

1 个答案:

答案 0 :(得分: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();