Php setParameter是否不替换通配符?

Php setParameter是否不替换通配符?,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我一直在浪费大量的时间试图弄明白为什么我不能在Symfony 2中的条令查询对象上使用setParameter方法 我创建了一个自定义存储库类,我想在其中添加一些自定义搜索方法/查找器 我已经尝试了许多不同的构建DQL的组合,但在每种情况下,它都不能取代我指定的通配符。我希望我错过了一些明显的东西,但我还是有点困惑 // Repository class namespace Acme\PurchaseOrderBundle\Entity; use Doctrine\ORM\EntityRep

我一直在浪费大量的时间试图弄明白为什么我不能在Symfony 2中的条令查询对象上使用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

这就是准备好的语句的工作方式-
getDQL()
返回准备好的语句。要获取所需的参数,请执行以下操作

$query->getParameters();

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

+1对于解释良好且详细的问题,感谢您的快速回复!