Php 将值传递给模型中的自定义查找

Php 将值传递给模型中的自定义查找,php,cakephp,Php,Cakephp,在我的模型中有以下自定义查找,我希望根据传递给它的值重新使用它 public function _findActive($state, $query, $result = array()) { if ($state === 'before') { $query['conditions'] = array('WebRequest.status' => false, 'WebRequest.read_status' => false);

在我的模型中有以下自定义查找,我希望根据传递给它的值重新使用它

 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页。但是,我希望能够将限制值传递给函数,并根据需要限制每页的卷数。我可以向传递到函数中的函数参数$state、$query、$result=array、$limit添加一个额外的字段$limit。如果我在函数atif$state==='before'的开始处调试,则该值仍保持传入状态,但由于该函数自动调用两次,因此在第二次调用该函数时,默认情况下会重置回null,因此我丢失传入的值。有什么办法可以解决这个问题吗?

试试这个:

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;
    }
}`

您可以将原始$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值的类变量进行限制