質問: $this->paginate('Event')で上書きをしてしまっているのでしょうか?もしそうだとしたらそうならずにページネーションを実装させたいのですが、どなたかご教授御願い致します。
回答: `$this->paginate()` メソッドの挙動について誤解があるようです。このメソッドは取得済みの結果を絞り込むのではなく、このメソッドを呼び出したときにSQLを実行してその都度新たにテーブルからデータを取得します。 提示されているソースだと、ページネーションの部分でレコードを絞り込む条件が何も指定されていないため、直前の`$events`の内容に関係なく、単に`Event.ja_openhour`の昇順で上位から最大20件を取得する形になっています。 希望の動作をさせるためには、`$this->paginate` にイベントIDの配列を渡す必要があります。 またCakePHPは2.2以降ならHashクラスという便利なライブラリがあるので積極的に利用すると良いでしょう。このユーティリティクラスは特に階層の深い配列を扱うときに有用です。 以下のような感じでどうでしょうか。 なお`$page`が勝手に増えていますが、表示したいページ番号が格納されているという想定です。 ``` // 取得済みの$events_tagからイベントIDの集合を配列として抽出 $event_ids = Hash::extract($events_tag, '{n}.Events_tag.event_id'); // ページネーション $this->paginate = array( 'limit' => 20, 'page' => $page, 'order' => 'Event.ja_openhour asc', 'paramType' => 'queryString', 'conditions' => array('Event.id' => $event_ids), ); $events = $this->paginate('Event'); ``` 参考 * ページ制御 — CakePHP Cookbook 2.x ドキュメント * Hash — CakePHP Cookbook 2.x ドキュメント