質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

5323閲覧

【cakePHP】1つのコントローラで複数のPagination(ページネーション)を使いたい

pecchan

総合スコア555

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

1クリップ

投稿2016/08/08 08:48

1つのコントローラにおいてアクション単位で動的にPaginationを切り替えたい場合、
どういった方法があるのでしょうか?

現在以下のコードのようになっております。

aaaアクションからページネーションが使えます。

bbbアクションからもページネーションが使いたいです。
その際、aaaアクションで使用したHogeモデルではなく
まったく別のモデルPiyoを使いたいのです。

なので$paginate = array()を再設定しなくてはいけないと考えております。

どうぞ宜しくお願い致します。

php

1class TestsController extends AppController { 2 3 public $paginate = array( 4 'Hoge' => array( 5 'fields' => array( 6 'id', 7 'name' 8 ), 9 'order' => 'id' 10 ), 11 12 ); 13 14 public function aaa() 15 { 16 17 //検索条件 18 $conditions = array('id' => 15); 19 20 21 //取得 22 $data = $this->paginate($conditions); 23 $this->set('data',$data); 24 25 } 26 27 public function bbb() 28 { 29 30 //ここからも使いたい 31 //ただしHogeではなくPiyoを使いたい。 32 } 33 34}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のような感じで、モデル側にオプション値を設定しておき、それをロードするのではいかがでしょうか?
paginateプロパティの値をModelに書いとく方法
※CakePHP3.2で確認してます

CakePHP

1// model/table/HogesTable.php 2 3class HogesTable extends Table 4{ 5 ・・・ 6 public function getOptions() { 7 $option = array( 8 'limit' => 8, 9 'order' => array('id' => 'ASC') 10 ); 11 return $option; 12 } 13} 14 15 16 17// model/table/PiyosTable.php 18class PiyosTable extends Table 19{ 20 ・・・ 21 public function getOptions() { 22 $option = array( 23 'limit' => 5, 24 'order' => array('id' => 'ASC') 25 ); 26 return $option; 27 } 28} 29 30// controllers/TestController.php 31class TestsController extends AppController { 32 33 public function aaa() { 34 //使うモデルをロードする 35 $this->loadModel("Hoges"); 36 //モデルのオプションを取得 37 $this->paginate = $this->Hoges->getOptions(); 38 //検索条件を設定 39 $query = $this->Hoges->find('all')->where(['id >' => 6]); 40 $hoges= $this->paginate($query); 41 42 $this->set(compact('hoges')); 43 $this->set('_serialize', ['hoges']); 44 } 45 46 public function bbb() { 47 //使うモデルをロードする 48 $this->loadModel("Piyos"); 49 //モデルのオプションを取得 50 $this->paginate = $this->Piyos->getOptions(); 51 //検索条件を設定 52 $query = $this->Piyos->find('all')->where(['id >' => 10]); 53 $piyos= $this->paginate($query); 54 55 $this->set(compact('piyos')); 56 $this->set('_serialize', ['piyos']); 57 } 58}

投稿2016/08/08 13:16

KatsumiTanaka

総合スコア924

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pecchan

2016/08/08 21:18

有難う御座います! この方法で実現しようと思います。 参考URLまで有難う御座いました! 勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問