2

Doctrine2 v. 2.1.7を使用してSymfony2でこれを実行しようとしています:

$query = $this->em->createQuery(
            "SELECT a
            FROM ".$repo." a
            WHERE a.type_id = :typeid
              AND a.scenario = :scen
              AND a.contact_id = :cid
              AND a.row_type LIKE :rwtp
            ORDER BY SUBSTRING(a.row_type, 4, 1)  "
        )->setParameters(
            array(
                'typeid'    =>$sesData['type_id'],
                'scen'      =>$sesData['scenario'],
                'cid'       =>$sesData['contact_id'],
                'rwtp'      =>'%.'.$whereVal.'%'
            )
        );

$customValues =  $query->getResult();

Doctrine 2 は ORDER BY 句で失敗します。これは、列名と表示される並べ替え方向以外は何も好きではないためです。

ネイティブクエリを使用するためのドキュメントを見てきましたが、このクエリは複数のテーブルからデータを取得するために使用されているため (使用するグローバルメソッド内にあるため)、うまくいきません。上記の where 句を超えて、残りの列名はテーブルごとに異なります。

これを実現するには、ネイティブではない他のすべての DQL クエリと同様に、マッピング (ハイドレーション?) を自動的に行う、真にネイティブなクエリが必要になると思います。しかし、その部分は私を悩ませています。

これを機能させるにはどうすればよいですか?

4

3 に答える 3

1

SUBSTRING(a.row_type, 4, 1)たとえば、挿入の結果を既に保存している別の列を作成し、その列をマップして、それで並べ替えるのはどうですか? とにかく、すべての行のすべてのクエリで部分文字列を計算するよりもはるかに効率的です。

于 2012-08-09T12:06:49.677 に答える
0

効率は悪くなりますが、データベースから結果を取得した後、PHP の並べ替え関数の 1 つを使用して自分で結果を並べ替える可能性を考えたことはありますか? 結果セットがそれほど大きくない場合、これは賢明なアプローチかもしれません。

于 2012-08-09T08:04:08.567 に答える
0

これを試して:

SELECT a, SUBSTRING(a.row_type, 4, 1) AS row_type
        FROM ".$repo." a
        WHERE a.type_id = :typeid
          AND a.scenario = :scen
          AND a.contact_id = :cid
          AND a.row_type LIKE :rwtp
        ORDER BY row_type
于 2012-08-11T10:41:07.450 に答える