11

Doctrine 2 で "DISTINCT" を使用する方法は知っていますが、実際には "DISTINCT ON (フィールド)" を使用する必要があり、QueryBuilder でこれを行う方法がわかりません。

私のSQLクエリは次のようになります:

SELECT DISTINCT ON (currency) currency, amount FROM payments ORDER BY currency

このクエリは完璧に機能しますが、QueryBuilder では使用できません。たぶん、このクエリを別の方法で書くことができますか?

4

2 に答える 2

3

SELECT DISTINCT ON (..)PostgreSQL がサポートする構造は、Doctrine の中心であるオブジェクト リレーショナル モデル (ORM) の外にあることをお勧めします。または、おそらく別の言い方SELECT DISTINCT ON (..)をすれば、Doctrine がコーディングしていない SQL 実装ではまれなためです。

動作しない実際のロジックに関係なく、Doctrine の " Native SQL " を試すことをお勧めします。クエリの結果を ORM にマップする必要があります。

NativeQueryネイティブの SELECT SQL ステートメントを実行し、結果を Doctrine エンティティまたは Doctrine がサポートするその他の結果フォーマットにマップできます。

このマッピングを可能にするには、結果のどの列がどのエンティティ プロパティにマップされるかを Doctrine に記述する必要があります。この説明は、オブジェクトによって表されResultSetMappingます。

この機能を使用すると、高度にベンダー最適化された SQL やストアド プロシージャなどのオブジェクトに任意の SQL コードをマップできます。

SELECT DISTINCT ON (..)私が思うに、ベンダー最適化 SQLに該当するため、使用NativeQueryするとアクセスできるはずです。

于 2016-02-17T21:02:30.047 に答える
0

Doctrine QueryBuilder にはいくつかの制限があります。クエリビルダでできるかどうかは調べていなくても、クエリビルダでクエリの書き方がわからないときは迷わずDQLを使います。

これらの例を http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#dql-select-examplesで確認してください

この助けを願っています。

于 2015-04-28T11:57:52.447 に答える