我设法在我的模型中覆盖了自定义查询的默认方法,如其他地方所建议的那样,
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';
答案 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(....