2017-05-30 74 views
0

我有多臺機器連接到我的數據庫中的一堆統計信息,我只需要檢索每個機器的最新統計信息。Doctrine Symfony - 使用原始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(); 

然而,這要求非常慢(。= 22SEC約)所以想在原始SQL更優化的一個來代替它:

$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提供了一種方法來將本地查詢的結果保存到實體中。 見http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html

隨着NativeQuery您可以執行本地SELECT SQL語句和映射 的結果主義實體或任何其他結果格式的支持原則 。

爲了使這種映射成爲可能,您需要描述 原則結果中的哪些列映射到哪個實體屬性。這個 描述由一個ResultSetMapping對象表示。