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