CakePHP 1.3用自定义查询分页

时间:2010-10-18 11:44:35

标签: php cakephp-1.3

我设法在我的模型中覆盖了自定义查询的默认方法,如其他地方所建议的那样,

function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array())

function paginateCount($conditions = null, $recursive = 0, $extra = array())

不幸的是,这种方法超越了此模型的所有分页,并影响其他地方的其他分页。我找到了一些代码,可以帮助我选择是否要根据变量使用自定义分页。

在我的模特中

var $useCustom = false;

function paginateCount($conditions = null, $recursive = 0, $extra = array())
{
if(!$this->useCustom)
    return parent::paginateCount($conditions, $recursive);

// code to handle custom paginate count here
}

我发现使用这种方法会给我一个错误,

  

致命错误:调用未定义的方法   在...中的AppModel :: paginateCount()

我做错了什么?我假设我也需要在paginate函数中使用类似的代码?我还认为我可以在我的控制器中设置此变量,即$this->useCustom = 'true';

2 个答案:

答案 0 :(得分:1)

经过一段时间深入研究代码后,我发现paginateCount和paginate的方法在Model中不存在,或者在其他任何地方都存在,这就是我无法调用它们的原因。解决方案是从主控制器复制代码,该代码测试是否存在覆盖

对于那些想要类似解决方案的人,请在paginateCount中使用以下内容

if(!$this->useCustom)
{
    $parameters = compact('conditions');
    if ($recursive != $this->recursive) {
        $parameters['recursive'] = $recursive;
    }
    $count = $this->find('count', array_merge($parameters, $extra));

    return $count;

} else {

custom method...

}

并在分页中使用

if(!$this->useCustom)
{
    $parameters = compact('conditions', 'fields', 'order', 'limit', 'page');
    if ($recursive != $this->recursive) {
        $parameters['recursive'] = $recursive;
    }
    $results = $this->find('all', array_merge($parameters, $extra));
    return $results;

} else {

custom method...

}

希望这有助于其他人。

答案 1 :(得分:0)

我认为在您的函数之前需要 public 关键字才能以这种方式使用范围解析运算符。

即。 公共功能 paginateCount(....