[s2container-php5:69] Re: EntityManagerによるQueryの実行とS2Pager.PHPについて

Eishi Kuroda kuroda @ jetsetrecords.net
2006年 12月 27日 (水) 13:31:36 JST


yonekawa様

御返答ありがとうございます。
なるほど、やはり良い方法はなさそうですか。

> この辺はS2Pager.PHP5の機構を見直す必要があるのかもしれませんが、
> EntityManagerを使うのであればS2Pagerが余計なクエリを付加するのは望ましくないかと思うのですが・・・

EntityManagerを使ってLimitでもなんでもクエリに付けられますし、
Pagerがどうこうするべき部分は少ないとも思えるのですが、
引数のDtoがPagerConditionを実装していれば、
EntityManagerのfind...メソッドで生成されるクエリにselect count(*)...
を付けたクエリが実行出来る、ということに出来れば、便利には違いないと思います。

独自にS2Pagerを拡張してEntityManagerの処理に件数取得処理を加えるのは
結構難しいですかね・・・。
今後も同じような状況にぶつかりそうなので。

S2Dao自体に、countアノテーションなんてのがあれば、
需要あるような気もするんですが。

では、失礼します。

黒田

On Mon, 25 Dec 2006 10:50:04 +0900
yonekawa <tcgrim @ gmail.com> wrote:

> yonekawaです。
> 
> 仰るとおり現状では、EntityManagerによるクエリと
> S2Pagerを連携することができないようになっています。
> 
> > S2Dao_PagerS2DaoInterceptorWrapperでは、
> > useLimitOffsetQueryがtrueの場合、メソッドがabstractの場合にのみ
> > limitとoffsetを使用したクエリを発行するようになっているため、当然そのようになります。
> S2Pager.PHP5はLimit、Offset句を利用する場合の実装は
> S2Dao.PHP5のクエリ生成を途中で奪ってLimit句を付加するようになっています。
> EntityManagerだとこのクエリ生成が別なので、現状では処理を奪うことができません。
> 
> 
> S2Dao_PagerUtilクラスに用意されたメソッドを使用することで
> S2Daoを介さずに検索件数を取得することはできますが、
> useLimitOffsetQuery=Falseの場合の処理と同じ処理を行うため(つまり配列操作)
> Limit句を使った場合よりもパフォーマンスが落ちます。
> 
> 
> なので、
> > EntityManagerによる検索を行いつつ、同時に検索件数を取得するには、
> > どのように行うのがスマートなのでしょうか?
> 現状ではご指摘の通り、
> Daoクラスにselect count(*) from ....
> と書くしかないと思われます(もっといい方法あるでしょうか?)
> 
> この辺はS2Pager.PHP5の機構を見直す必要があるのかもしれませんが、
> EntityManagerを使うのであればS2Pagerが余計なクエリを付加するのは望ましくないかと思うのですが・・・
> 



S2Container-PHP5 メーリングリストの案内