2

私はFLOW3にまったく慣れておらず、Doctrineにも非常に慣れていません。

いくつかのテストを実行しているところですが、後で使用するいくつかのテクニックを学習または理解したいと思います。今、私はいくつかの統計を生成したいこの教義の部分で立ち往生しています。

$results = $this->entityManager
    ->createQuery('SELECT version,count(version) 
        FROM (SELECT device, version 
            FROM \MyStuff\Stats\Domain\Model\Stat 
            WHERE 
                date > \'2011-10-01 00:00:00\' and 
                date < \'2011-10-02 00:00:00\' 
            GROUP BY device) GROUP BY version')
    ->getResult();

私は他の場所でも尋ねました、そこで彼らは私をDoctrineDocsに導きました。さて、今いくつかの例がありますが、これらの2つのライナーは取るに足らないものであり、その種の副選択に関連する例は見つかりませんでした。
ですから、ここの誰かが私を助けてくれることを願っています。

編集:
dqlを使用してこれを解決したいと思います。
querybuilderを使用してこれを解決しようとしましたが、querybuilder!=dqlと言われました

編集2:
doctrine2は「FROM(SUBSELECT)」の副選択をサポートしていませんが、「... WHERE IN(SUBSELECT)」をサポートしており、クエリをIN()形式に書き換えることができると言われました。さて、今それを理解しようとしています。

編集3: from-subqueryをin-subqueryに書き換えることができません。だから...dqlはサブクエリを実行せず、dqlでやりたいことを実行する他の方法はありませんか?!そうすると、dqlには非常に重要な機能が欠けていると思います。それとも私はsthを見ていませんか。ここ ?

編集4: 最終的にサブクエリを取得しましたが、約10倍遅くなり(0.4ではなく4秒)、#doctrineの教義の人から、代わりにnativeQuery関数を使用するように言われました。

編集5: 今はnativeQueryを使用して動作します、それについての私の答えを参照してください...

4

1 に答える 1

0

ネイティブクエリを使用すると、そのように機能します...

$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
$rsm->addScalarResult('version', 'version');
$rsm->addScalarResult('count', 'count');
$results = $this->entityManager
    ->createNativeQuery(
        'SELECT version, COUNT(version) as count FROM
        (
            SELECT device, version 
            FROM mystuff_stats_domain_model_stat 
            WHERE 
                date > \'2011-10-01 00:00:00\' and 
                date < \'2011-10-02 00:00:00\' 
            GROUP BY device
        ) 
        as devices GROUP BY version',$rsm)
    ->execute();
echo var_dump($results,true);
于 2011-11-08T13:15:52.793 に答える