2017-05-30 23 views
0

データベースの統計情報に複数のマシンが接続されており、それぞれの最新の統計情報のみを取得する必要があります。Doctrine Symfony - Raw SQLとのエンティティマッピングを使用

私は、次のリクエストで教義のエンティティマネージャを使用:ただし、この要求が非常に遅い(= 22sec程度。)ので、私は生のSQLで、より最適化されたものと交換したい

$str = "SELECT s, sa.slug "; 
$str .= "FROM AppBundle:Statistique s "; 
$str .= "LEFT JOIN AppBundle:StatistiqueAnomalie sa WITH (s.anomalie = sa.num) "; 
$str .= "LEFT JOIN AppBundle:Statistique sp WITH (s.numserieMachine = sp.numserieMachine AND s.datecrea < sp.datecrea) "; 

$query = $this->getEntityManager()->createQuery($str); 

//var_dump($query->getSql()); 
return $query->getResult(); 

$str = "SELECT * FROM 
     (SELECT numserie_machine, MAX(datecrea) as ma FROM statistique GROUP BY numserie_machine) as maxv 
     INNER JOIN statistique s on maxv.numserie_machine=s.numserie_machine and maxv.ma=s.datecrea 
     LEFT JOIN statistique_anomalie sa on s.anomalie=sa.num"; 

$conn = $this->getEntityManager()->getConnection(); 

$query = $conn->prepare($str); 
$query->execute([]); 

return $query->fetchAll(); 

このリクエストはうまくいくものの、まともなスピードで動作しますが、データは使用できません。実際、私の小枝ファイルは、連想配列の代わりに教義のエンティティを使用しています。

私の結果をエンティティにマップする方法はありますか?または、少なくとも、DQLで同様の要求を実行する方法はありますか?

ありがとうございます。

答えて

1

はい、doctrineはネイティブクエリの結果をエンティティに含める方法を提供します。 あなたはネイティブSELECT SQL文を実行してDoctrineのエンティティに 結果をマップしたり、他の結果フォーマットが教義によって をサポートすることができますNativeQueryでhttp://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html

を参照してください。

このマッピングを可能にするには、 Doctrineにどのエンティティプロパティの結果マップのどの列を記述する必要があります。この の説明は、ResultSetMappingオブジェクトによって表されます。

関連する問題