【CakePHP】find では「page」を指定できる
季節の変わり目でちょっと風邪気味な気がする kimoto です。季節が僕だけを変える。おっと歳がバレる。
今日は CakePHP の超小ネタで失礼します。$Model->find() に渡すパラメータの小ネタです。
この find() という、CakePHP を使ううえで利用頻度 1、2 を争うメソッドなのに今日知ったパラメータがありました。
事の発端は一覧のページ送り機能、「paginate」を実装でした。
まあ長くなるので省きますが、とある理由で paginate ヘルパーが使えない状況にあり、自前でページ送り機能を実装しなければならない状態になりました。
このページ送り、自前で実装するとなると何かと面倒ですよね。表示する全件数を取ってきて1 ページに表示する最大件数と照らし合わせて全ページ数を算出、さらに現在のページ数を取得してそのページと 1 ページに表示する件数を絡めてデータのうちどこからどこまでを取ってくるかを算出して…云々…など。
まあそんな機能を実装していた時、面倒くさがり黒帯(二段)の僕は、
$Model->find($type, $params);
この「$params」で limit の オフセットを設定するのがめんどい!と思い、
とりあえずマニュアルを開いてみたのです。
そしたらなんともよさげなパラメータが!
array(
'conditions' => array('Model.field' => $thisValue),
'recursive' => 1,
'fields' => array('Model.field1', 'DISTINCT Model.field2'),
'order' => array('Model.created', 'Model.field3 DESC'),
'group' => array('Model.field'),
'limit' => n, //int
'page' => n, //int
'offset' => n, //int
'callbacks' => true
)
ここをみると、「page」というパラメータがあります。
これはまさか、ここに現在のページ数を入れると勝手にオフセットを設定してくれるのか!?
やってみたところ、見事に該当のデータを取得できました!
ということで、現在のページと 1 ページに表示する最大件数をつかってオフセットを取得して…みたいな計算をせず、なにも考えずに現在のページをドーンとぶち込んでやれば勝手にデータを取得してきてくれました。
うーん、素晴らしい。
てことで、今回は知ってる人は当然のように知っている内容の小ネタでした。
個人的にこの手のフレームワークは、使い始めてある程度使えるようになると困った時くらいしかマニュアルを見なくなってしまう悪い癖があるので、今後はもうちょっとマニュアルをマメにチェックしていこうと思いました。