2016-09-11 7 views
0

phpMyAdminで実行するとうまく動作するMySQLクエリがあります。それは私に修理の分が300Doctrine select、sum with

SELECT date FROM `job` 
INNER JOIN `jobs_repairs` jr on job.id = jr.job_id 
INNER JOIN `repair` r on jr.repair_id = r.id 
GROUP BY date 
HAVING SUM(r.minutes) < 300 

私はこれをどのように行うかを超えた日が得られますので、今、私は、教義にそれを移調する必要がありますか? Doctrineは通常オブジェクトを返すだけですが、ジョブオブジェクトの修復時間が合計で300分を超える日付を探しているので、これはオブジェクトではありません。

答えて

3

ジョブエンティティにrepositoryを設定しましたか?

次のものはテストされていませんが、うまくいけば始めましょう。私はQueryBuilder構文を使用していますが、それをかなり簡単にプレーンDQLに変換できるはずです。

$this->getQueryBuilder('j') 
    ->innerJoin('j.repair', 'r') 
    ->groupBy('j.date') 
    ->having('SUM(r.minutes) < 300') 
    ->getQuery() 
    ->getResult(); 

これは、クエリに一致するJobオブジェクトを取得することです。 JobエンティティにgetDate()メソッドがある場合、そのように取得するか、別の​​3210を見ることができます。代りに配列が必要な場合は、getResult()の代わりにgetArrayResult()を使用できます。


更新されました。私はSUMを逃したqooplmaoをありがとう

+1

あなたは 'SUM'を見逃しました。ありがとうございます; – qooplmao

+1

;動作するようです!最後に は、私もDQLを使用: \t \t \t \t 'AppBundleから「SELECT j.date:ジョブJ \t \t \t \t INNER j.date \t BY j.repair rを \t \t \t \tグループに参加\t \t \t HAVING SUM(r.minutes)>:minutes'' – bluppfisk