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

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

コントローラ

$data = $this->Hoge->find('all', array(
	'fields'=> array('id', 'name', 'count(*) as cnt'),
	'group' => array('name'),
));

取得結果はこんな感じになるのでいけてない。

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

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

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

<?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;
	}
}
?>

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

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