2012年02月02日

Group Byしている時にpaginatorが正常に機能しない件の対策

CakePHPでpaginateを使う際、groupのオプションを指定すると、
ページングや総件数の表示がおかしくなった。

基本的には、aroundthedistanceさんの以下のブログで対応可能。

Group Byしている時にpaginator->number()が表示されない件
http://d.hatena.ne.jp/aroundthedistance/20090728/1248784179

ただ、これだと、Controller側でpaginateに渡したrecursiveが
beforeFindで拾えなくなってました。

適当に変更して以下のように対応。


/**
* app/models/app_model.php
*/

function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
    $parameters = compact('conditions');
    if ($recursive != $this->recursive) {
        $parameters['recursive'] = $recursive;
    }
    $count = $this->find('count', array_merge($parameters, $extra));
    if (isset($extra['group'])) {
        $count = $this->getAffectedRows();
    }
    return $count;
}


以上。

    if ($recursive != $this->recursive) {
        $parameters['recursive'] = $recursive;
    }
の部分、if文がいらなく思えて仕方ないけど、何か理由があるんだろうと放置。

CakePHP1.3




この記事へのトラックバックURL

http://killey.ti-da.net/t3778422