我一直在浪费相当多的时间来弄清楚为什么我不能在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
答案 0 :(得分:3)
这就是预处理语句的工作方式 - getDQL()
返回准备好的语句。要获取您需要执行的参数
$query->getParameters();
Doctrine传递预准备语句和执行参数,但不发送查询。