$deposits = $this->Deposit->find('all', array( //'fields'=> array('customer_id', "sum(deposit) as sum_deposit"), 'fields'=> array('customer_id', 'SUM(Deposit.deposit) as deposit'), 'group' => array('customer_id'), ));
いろいろ参考サイトから得た情報でやるのだが、以下のようになってしまう。うーん。できるハズなんだがなぁ。
Array ( [0] => Array ( [Deposit] => Array ( [customer_id] => 1 ) [0] => Array ( [deposit] => 200 ) ) [1] => Array ( [Deposit] => Array ( [customer_id] => 2 ) [0] => Array ( [deposit] => 300 ) ) )
これを以下のようにしなければCakePHPらしくない。
スポンサードリンク
Array ( [0] => Array ( [Deposit] => Array ( [customer_id] => 1 [deposit] => 200 ) ) [1] => Array ( [Deposit] => Array ( [customer_id] => 2 [deposit] => 300 ) ) )
/app/app_model.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; } } ?>
参考文献
- Dealing with calculated fields in CakePHP’s find() « nuts and bolts of cakephp :Dealing with calculated fields in CakePHP’s find()Let’s say we’ve got some calculated field in our find() method, something like SUM() or COUNT() or maybe AVG(). For the sake of example let’s do something simpl...
コメント
‘fields’=> array(‘customer_id’, ‘SUM(Deposit.deposit) as deposit’
を
‘fields’=> array(‘customer_id’, ‘SUM(Deposit.deposit) as Deposit.deposit’
でうまくいきませんかね?
コメントありがとうございます。
テスト環境が手元にないので、次の機会に試させていただきます。