1

我一直在浪费很多时间试图弄清楚为什么我不能在 Symfony 2 中的 Doctrine Query 对象上使用 setParameter 方法。

我创建了一个自定义存储库类,我想在其中添加一些自定义搜索方法/查找器。

我已经尝试了很多不同的构建 DQL 组合,并且在每种情况下它都不会替换我指定的通配符。我希望这是我错过的显而易见的事情,但我还是有点困惑。

// Repository class

namespace Acme\PurchaseOrderBundle\Entity;

use Doctrine\ORM\EntityRepository;

class PurchaseOrderRepository extends EntityRepository
{
    public function findAllFiltered($sortType = 'id', $sort = 'ASC', $offset = 1, $limit = 30)
    {
        //Variation 1
        $query = $this->getEntityManager()
        ->createQuery('
                      SELECT po FROM AcmePurchaseOrderBundle:PurchaseOrder po
                      WHERE po.id = ?1'
        );
        $query->setParameter(1, 1);

        return $query->getDql();    

        // Yields: SELECT po FROM AcmePurchaseOrderBundle:PurchaseOrder po WHERE po.id = ?1

        //Variation 2
        $query = $this->getEntityManager()
        ->createQuery('
                      SELECT po FROM AcmePurchaseOrderBundle:PurchaseOrder po
                      WHERE po.id = :value'
        );

        $query->setParameter('value', 1);

        return $query->getDql();
        // Yields: SELECT po FROM AcmePurchaseOrderBundle:PurchaseOrder po WHERE po.id = :value
    }
}

我开始使用 QueryBuilder,但这也以同样的问题告终,我无法获取要保存的参数!这真是太奇怪和令人沮丧了。

我正在使用 Symfony 2.1.5-DEV

4

1 回答 1

3

这就是准备好的语句getDQL()的工作方式 - 返回准备好的语句。要获取您需要做的参数

$query->getParameters();

Doctrine 传递准备好的语句和执行参数,它不发送查询。

于 2012-12-18T11:48:01.803 回答