countやsumを使う時のフィールド名を指定する
開発環境:CakePHP2.5.1
CakePHPでcountやsumなどを使う場合、ちょっとした工夫が必要になります。
group byを使う
countやsumなどを利用する場合で、各グループごとの集計をしたい時には、group byを指定します。
<?php
$params = array(
'fields' => array(
'count(area_id)',
),
'group' => array(
'area_id',
),
);
このようにすると、次のような結果が返ってきます。
Array
(
[0] => Array
(
[0] => Array
(
[count(id)] => 2
)
)
[1] => Array
(
[0] => Array
(
[count(id)] => 3
)
)
)
返り値のモデル名を指定
上記の例のようにすると、モデル名が入る部分に「0」が入っていて、その後の処理が少しやり難くなります。
そこで使うのが、virtualFields。
<?php
class Sample extends AppModel
{
public $virtualFields = array('cnt' => 0);
public function getList() {
$params = array(
'fields' => array(
'count(id) AS Sample__cnt',
),
'group' => array(
'area_id',
),
);
return $this->find('all', $params);
}
}
virtualFieldsでcntというフィールド名を指定し、count部分に別名として「モデル名__フィールド名」を指定します。
そうすると結果は次のようになります。
Array
(
[0] => Array
(
[Sample] => Array
(
[cnt] => 2
)
)
[1] => Array
(
[Sample] => Array
(
[cnt] => 3
)
)
)
これで他のフィールドと同じように扱うことができますね。
