簡體   English   中英

CakePHP 1.3通過自定義查詢進行分頁

[英]CakePHP 1.3 paginate with custom query

正如其他地方所建議的,我已經設法為模型中的自定義查詢覆蓋了默認方法,

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()。

我究竟做錯了什么? 我以為我在分頁函數中也需要類似的代碼? 我是否也可以在控制器中設置此變量,也就是$this->useCustom = 'true';

深入研究代碼后,我發現paginateCount和paginate方法在模型中或其他任何地方都不存在,這就是為什么我不能調用它們的原因。 解決方案是從主控制器復制代碼,以測試是否存在超控

對於那些想要類似解決方案的人,請在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...

}

希望這對其他人有幫助。

我認為您需要在函數之前以這種方式使用范圍解析運算符的public關鍵字。

公共功能 paginateCount(....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM