データベースからデータを取得するときにGROUP BYでCOUNT(*)を取得するときって結構多いと思うけど、
普通に取得しようとすると配列に変な形式で値が入ってしまう。

で、AppModelの中にafterFindを定義して自力で変更してねという方法を試した。

コントローラ
[php]
$data = $this->Hoge->find(‘all’, array(
‘fields’=> array(‘id’, ‘name’, ‘count(*) as cnt’),
‘group’ => array(‘name’),
));
[/php]

取得結果はこんな感じになるのでいけてない。
[php]
Array
(
[0] => Array
(
[Hoge] => Array
(
[id] => 2
[name] => HogeHoge
)
[0] => Array
(
[cnt] => 3
)
)
[1] => Array
(
[Hoge] => Array
(
[id] => 3
[name] => Hoge
)
[0] => Array
(
[cnt] => 1
)
)
)
[/php]

で、以下に書いてあるようにModelのafterFindを使って自力でやれよとあったので試してみたら何とか行けた。
http://nuts-and-bolts-of-cakephp.com/2008/09/29/dealing-with-calculated-fields-in-cakephps-find/

AppModelの中にこんな感じでafterFindを定義する

[php]
<?php
class AppModel extends Model {
function afterFind($results, $primary=false) {
if($primary == true) {
if(Set::check($results, ‘0.0’)) {
$fieldName = key($results[0][0]);
foreach($results as $key=>$value) {
$results[$key][$this->alias][$fieldName] = $value[0][$fieldName];
unset($results[$key][0]);
}
}
}
return $results;
}
}
?>
[/php]

コントローラの変更は特に必要なくこれでさっきよりましになる。

これでいいのか分からないけどとりあえずOKとしておこう。