1

エンティティ クラスにいくつかのメソッド (作成と締め切りの間の時間間隔の計算など) があり、DQL で並べ替えたいと考えています。プロパティとしてメソッドにアクセスするために使用しようとし__getましたが、DQL が使用するget_object_propertiesか類似しているようで、これは機能しません。

機能しなかったクエリの例: SELECT t FROM Entity\Task t ORDER BY t.TTL ASC、ここで TTL は__get()which を介してアクセスされ、 が返されますgetTTL()

この方法でそれらにアクセスするために使用できるトリックはありますか、それとも結果セットを自分でソートした方がよいでしょうか?

4

1 に答える 1

3

ありえない。計算値で並べ替えるには、値を事前に計算してフィールドに格納します。値を事前に計算すると、より効率的で応答性の高いルックアップという追加の利点が得られます。

DQL は SQL にマップされることに注意してください。あなたが求めていることを行うには、DQL はテーブル全体から一致するすべてのレコードを取得し、それらをエンティティ オブジェクトにハイドレートし、関数を実行してからメモリ内で並べ替える (またはクエリを再実行する) 必要があります。いいアイデアですが、うまくいきません。

値を事前に計算するという考えが気に入らない場合は、これらの計算のほとんどで、おそらく DQL でインラインで計算することもできます。つまり、2 つのフィールド値の差で並べ替えることができます。重要な点は、エンティティ オブジェクトで計算関数を呼び出すのではなく、DQL でインラインにする必要があるということです。

于 2011-03-20T22:18:11.160 に答える