1

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を使用しています

4

1 に答える 1

3

これは、準備されたステートメントがどのように機能するかです - 準備さgetDQL()れたステートメントを返します。必要なパラメータを取得するには

$query->getParameters();

Doctrine は、クエリを送信しない実行のために、準備されたステートメントとパラメーターの両方を渡します。

于 2012-12-18T11:48:01.803 に答える