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
ページングや総件数の表示がおかしくなった。
基本的には、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


