[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 メーリングリストの案内