我在我的模型中有以下自定义查找,我想根据传递给它的值重复使用。
public function _findActive($state, $query, $result = array()) {
if ($state === 'before') {
$query['conditions'] = array('WebRequest.status' => false, 'WebRequest.read_status' => false);
$query['contain'] = false;
$query['limit'] = 25;
$query['order'] = array('WebRequest.created' => 'asc');
return $query;
}
return $result;
}
我可以从我的控制器调用此函数,它会将结果分页为每页25个。但是,我希望能够将限制值传递给函数,并根据需要按每页的此数量限制。我可以在传递给函数的函数参数$limit
中添加一个额外的字段($state, $query, $result = array(), $limit)
。如果我在if($state === 'before')
处的函数开始时调试,那么值保持为传入,但由于此函数被自动调用两次,因此默认情况下第二次调用函数时会将其重置为null,所以我失去了传入的价值。有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
试试这个:
public function _findActive($state, $query, $result = array()) {
if ($state === 'before') {
$query['conditions'] = array(
'WebRequest.status' => false,
'WebRequest.read_status' => false
);
$query['contain'] = false;
$query['limit'] = 25;
$query['order'] = array('WebRequest.created' => 'asc');
return $query;
} elseif ($state == 'after') {
return $results;
}
}`
答案 1 :(得分:0)
您可以将原始$limit
值存储在模型中的私有类变量中,并将其用于限制。类似的东西:
class YourModel extends AppModel {
private $_originalLimit;
public function _findActive($state, $query, $result = array, $limit) {
....
if (!empty($limit))
$this->_originalLimit = $limit;
$query['limit'] = $this->_originalLimit;
....
}
}
当使用null $limit
第二次调用此函数时,具有原始$ limit值的类变量将用于限制。