2016-04-13 21 views
0

OK、Doctrine ORM(2.5)を使用してコードを書き直しています。Doctrine QueryBuilder式

古いコードはこのような何かを持っているクエリを作成します。

SELECT * FROM couples INNER JOIN individuals ON (couples.id = individuals.couple_id) 
GROUP BY couples.id 
HAVING SUM(individuals.date_of_birth <= '1976-01-01') > 0 

私は教義QueryBuilderを使用して、このベストを実装する方法を見当もつかない。これは非常に単純化された例です。実際のクエリはずっと長く、いくつかのHAVING句があります。一致するIndividualを含むCouplesのみが取得されるようにするには、SUM(some_condition) > 0を使用します。

Doctrineにhaving節を$queryBuilder->having()で追加することはできますが、SUM()関数を使用するとできません。何か案は?

答えて

1

実は、havingと一緒sumを使用してからあなたを止めるものは何もありません:

$queryBuilder 
    ->select('couple, individual') 
    ... 
    ->having('sum(individual.date_of_birth) > 0'); 

クエリビルダのsum()機能は、実際には二つの引数を取り、あなたがしているものではない数学的な表現を返します。後に。

上記の例のようにフィールドにsumを使用すると、実際には集約関数になります。

あなたの場合、別のことは、documentationによれば、すべてのhaving()は、以前に設定された条件をすべて上書きすることです。 これらを複数使用する場合は、andHavingorHavingを使用してください。

私はこれについて説明します。

関連する問題