CakePHP

【CakePHP2】自作SQLでページネーションさせる場合の方法

CakePHP2.xで、ややこしいSQLを自作し、ページネーションさせたいという場合の方法を備忘録としてポストします。

CakePHP2.x 自作SQLでページネーション

サンプルは以下の状態です。

  • Sample.php
  • SamplesController.php

Sample モデル

Sample.php

コントローラー

個人的に「SQLを作るのはモデル内で」という強迫観念があるので、わざわざモデル内でSQLを作成してリターンしていますが、気にならない場合はコントローラーで作成しても問題はないと思います。

以下、軽く解説

モデル内、自作SQLでのページネーション用(1) 部の
"$extra" には、渡した SQL が代入され、
"$limit" には渡したリミット数値、この場合は 15 が代入され、
"$page" には現在のページ数が代入されています。

なお、PHPの func_get_args() 関数のエイリアスと思われ、func_get_args() をダンプすると、全ての配列が格納されているのが分かります。

なお、SamplesController 内の別アクションから、自作SQLを使わないページネーションを並列で行った場合はキレイにバグるので、どちらかを別モデルに移設するなどの手段が必要です。

モデルのファンクション名を上書きするなどの手段があるとは思いますが、よく分からなかった(調べるのが面倒だった)ので、私は別モデルを新設して逃れました。

冷静に考えると恐らく、

この部分で、自作SQL用のモデルを指定すれば幸せになれるような気がします。
以上です。

-CakePHP
-, ,