[CakePHP2.x]pagenateで別モデルを使いたい場合

Cakeのpagenateヘルパーは便利なんだけど、ちょっといじりたいときはすごくわかりにくい。

コントローラーでは普通

$this->paginate = array(
'conditions'=>array(),
'limit'=>30,
・・・・・略・・・・
);
$this->set('rows', $this->Paginator->paginate());

コントローラーと同じ名前のモデル…ではなく、正確には$usesで最初に指定したモデルを使う場合だったらこれでOK。
コントローラーと同じ名前のモデルという説明がおおいので、これでハマる人が結構いるらしい。

じゃあ、違うモデルを使うには。。。

$this->set('rows', $this->Paginator->paginate('Model',array('conditions'=>array('status'=>1),'limit'=>30) ));

これも誰しも1回はハマるであろう罠。paginateの第2引数はconditionsしか指定できないのでこれはNG!
正解は

$this->set('rows', $this->Paginator->paginate('Model',array('status'=>1) ));

としかできない。

じゃ、細かい設定どうするのかというと。

$this->paginate = array('Model'=>(
  'conditions'=>array(),
  'limit'=>30,
  ・・・・・略・・・・
  )
);
$this->set('rows', $this->Paginator->paginate('Model'));

という感じで$this->pagenateにモデル名の配列を作ってそこに設定をいれればよいようです。
直感的にわかりにくい仕様。
conditionsとかlimitとかいうモデルがあったらどうなるんでしょうね…?

タイトルとURLをコピーしました