Symfony2のDoctrineQueryオブジェクトで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を使い始めましたが、これも同じ問題が発生し、保存するパラメーターを取得できませんでした。これは本当にとても奇妙でイライラします。
私はSymfony2.1.5-DEVを使用しています