【问题标题】:Doctrine where if empty教义若为空
【发布时间】:2017-01-18 16:53:26
【问题描述】:
 $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 开头!

谢谢你的建议..

更新

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

未定义的方法“getQuery”。方法名称必须以 findBy 或 findOneBy 开头!

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

【问题讨论】:

  • 这是一个非常简单的错误。问问自己 $holiday_packages = $repository->createQueryBuilder('hp') 在做什么,问题就会很明显。
  • @Cerad 你能告诉我更多关于这个非常简单的错误吗?我真的不明白问题是什么
  • @Cerad 的意思是,你应该在第二和第三块代码中使用 $holiday_packages 而不是 $repository,你的问题就会得到解决
  • @OlivierC 谢谢 :)
  • 接受的答案应该可以解决它,但也许将 $holiday_packages 重命名为 $query_builder 之类的名称会让您将来更容易理解它。第一次调用 createQueryBuilder 会返回一个 QueryBuilder 对象,该对象将在所有后续调用中使用。以下调用起作用的原因是所有方法都返回 $this (QueryBuilder)

标签: php symfony doctrine-orm


【解决方案1】:

您应该继续使用$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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2017-07-16
    • 1970-01-01
    相关资源
    最近更新 更多