[s2container-php5:67] EntityManagerによるQueryの実行とS2Pager.PHPについて
Eishi Kuroda
kuroda @ jetsetrecords.net
2006年 12月 22日 (金) 18:43:37 JST
こんにちは、黒田です。
EntityManagerとS2Pager.PHPの組み合わせで質問があります。
少し複雑で動的な検索条件を持ったクエリを発行しようと思い、
EntityManagerを使用してみたのですが、
limitとoffsetによる指定範囲の取得及び、検索件数の取得も同時に行いたいと考え、
EntityManagerとS2Pager.PHPの機能の両方を
組み合わせて使えないかと試行錯誤しています。
データベースはMySqlでlimitとoffsetが使用出来ますので、
S2Pager.PHPの為にdao.diconに下記の様に設定します。
<component name="interceptor" class="S2Dao_PagerS2DaoInterceptorWrapper">
<property name="useLimitOffsetQuery">true</property>
</component>
EntityManagerを使用するため、S2Dao_AbstractDaoを継承し、
Daoクラスを実装するクラスを下記の様に定義します。
GoodsPagerConditionはS2Dao_DefaultPagerConditionを継承した検索条件Dtoです。
class GoodsDaoImpl extends S2Dao_AbstractDao implements GoodsDao
{
public function getGoodsByGoodsPagerConditionList(GoodsPagerCondition $dto)
{
...
}
}
といった具合です。
ここで、そのまま
getGoodsByGoodsPagerConditionList($dto);
を呼び出しても、$dtoに設定したlimitやoffsetは無視され、countも設定されません。
S2Dao_PagerS2DaoInterceptorWrapperでは、
useLimitOffsetQueryがtrueの場合、メソッドがabstractの場合にのみ
limitとoffsetを使用したクエリを発行するようになっているため、当然そのようになります。
EntityManagerによる検索を行いつつ、同時に検索件数を取得するには、
どのように行うのがスマートなのでしょうか?
EntityMangaerに与えるクエリにlimitを付ければ指定範囲は取得できますが、
検索件数をどうやって取得するのが良いか悩んでいます。
Daoクラスに
select count(*) from ....
と書くしか無いのでしょうか?
from以下に多数のテーブルがjoinされている場合など、手入力するのは面倒です。
検索に使用したクエリの内容を使って、
select count(*) from (検索に使用したクエリ) as total
といったことが簡単に出来れば良いのですが・・・。
このような場合、みなさんはどのように対応されますか?
では、よろしくお願いいたします。
黒田映史
S2Container-PHP5 メーリングリストの案内