2016-11-15 88 views
0

在Symfony2中使用Doctrine,我需要恢復每個項目,併爲他們每個人,他們的報告的最新時間戳。 所以我想執行使用DQL的查詢,這會是這樣的SQL:加入與Doctrine DQL子查詢

SELECT * from `item` i 
LEFT JOIN `kit` k ON k.`id` = i.`kit_id` 
LEFT JOIN 
    (SELECT e.`item_id`, MAX(e.`dateCreation`) 
    FROM `entete_rapport` e 
    GROUP BY e.`item_id`) latest ON latest.`item_id` = i.`id` 

我不能有相同帶DQL。我想我得子查詢等主要的一個分開,像這樣的東西:

$subSelect->select('e AS ItemId, MAX(e.dateCreation) AS latest') 
       ->from('CATUParkBundle:EnteteRapport', 'e') 
       ->groupBy('e.item'); 

$qb->select('i') 
       ->from('CATUParkBundle:Item', 'i') 
       ->leftJoin('i.kit', 'k') 
       ->leftJoin('CATUParkBundle:EnteteRapport f', sprintf('(%s)', $subSelect->getDQL()), 'latest', 'f.id = latest.ItemId'); 

我不能讓這個查詢工作,我真的很需要你們。 先謝謝你,你真棒!

回答

0

好像加入子查詢do not work in dql。 (我收到錯誤信息:[Semantical Error] line 0, col 52 near '(SELECT e': Error: Class '(' is not defined.

您可以運行$em->getConnection()->prepare($yourRawSql)->execute()->fetchAll(),但是這會返回一個原始結果數組(無對象)。見raw sql queries on knp-lab

或與具有替代一個子查詢做到在DQL加入:

$qb->select('i', 'i') 
    ->addSelect('MAX(e.dateCreation)', 'date') 
    ->from('CATUParkBundle:Item', 'i') 
    ->leftJoin('i.kit', 'k') 
    ->leftJoin('i.rapportOrWhatEver', 'f') 
    ->groupBy('e.id');