やりたいこと
日付ごとにidのレコード数を調べたい.
CakePHP2でfindして,DBからデータを取ってくるときに,count()やsum()などの集計関数を使ってデータを取ろうとすると,以下のようになる.
$result = $this->Model->find('all', array(
'fields'=> array('id', 'count(id) as cnt'),
'group' => array('DATE(created)')
));
こうなるとforで回す時などに面倒くさい.
// 返ってくる配列
Array
(
[0] => Array
(
[Model] => Array
(
[id] => 1
)
[0] => Array
(
[cnt] => 1 // ココに追加されてしまう。[0]は使いづらい。
)
)
解決策
以下のようにすると,使いやすい配列が返る.
$this->Model->virtualFields['cnt'] = 0; // バーチャルフィールドを追加
$result = $this->Model->find('all', array(
'fields'=> array('id', 'count(Model.id) as Model__cnt'), // Model__エイリアスにする
'group' => array('DATE(created)'),
)
);
//使いやすい配列
Array
(
[0] => Array
(
[Model] => Array
(
[id] => 1
[cnt] => 1 //Modelの子に入った。
)
参考