2016-11-15 15 views
0

Symfony2でDoctrineを使用すると、それぞれのアイテムとそのそれぞれの最新のタイムスタンプを回復する必要があります。 だから私はSQLで次のようになりますDQLを使用してクエリを実行したいと思います: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'); 

私はこのクエリの作品を作ることができないです、私は本当にあなたたちが必要:私はこのようなもので、私はサブクエリらメイン1を分離する必要があると思います。 ありがとうございます、あなたは素晴らしいです!

答えて

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()を実行できますが、これは生の結果配列(オブジェクトなし)を返します。

$qb->select('i', 'i') 
    ->addSelect('MAX(e.dateCreation)', 'date') 
    ->from('CATUParkBundle:Item', 'i') 
    ->leftJoin('i.kit', 'k') 
    ->leftJoin('i.rapportOrWhatEver', 'f') 
    ->groupBy('e.id'); 
:参加 raw sql queries on knp-lab

を参照するか、サブクエリの代わりにHAVINGとDQLでそれを行います

関連する問題