私は通常、検索パラメーターをセッションに保存し、コントローラーアクション内のすべてを処理するために使用します。
function indexbystatus() {
$this->set('title_for_layout','List Assets by Status');
$this->Session->write('sender',array('controller'=>'assets','action'=>'indexbystatus'));
$searchkey=$this->Session->read('Searchkey.status');
$conditions='';
if($searchkey) {
$conditions=array('Asset.status_id'=>$searchkey);
}
if(!empty($this->data)) {
// if user has sent anything by the searchform set conditions and
// store it to the session but if it is empty we delete the stored
// searchkey (this way we can reset the search)
if($this->data['Asset']['status_id']!='') {
$conditions=array('Asset.status_id'=>$this->data['Asset']['status_id']);
$this->Session->write('Searchkey.status',$this->data['Asset']['status_id']);
} else {
$this->Session->delete('Searchkey.status');
$conditions=null;
}
} else if($searchkey) {
// if no data from the searchform we set the stored one
// from the session if any
$this->data['Asset']['status_id']=$searchkey;
}
$this->paginate=array(
'limit'=>25,
'order'=>array('Asset.status_id'=>'asc'),
'conditions'=>$conditions,
);
$this->set('assets',$this->paginate());
$statuses=$this->Asset->Status->find('list');
$this->set('statuses',$statuses);
}
モデルではなくコントローラーアクションで処理する方が好きなので、アクションごとに異なるソリューションとロジックを持つことができます。