PR

[CakePHP] SUM,MAX,MINの結果を正しい配列形式にする

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

参考文献

コメント

  1. およ より:

    ‘fields’=> array(‘customer_id’, ‘SUM(Deposit.deposit) as deposit’

    ‘fields’=> array(‘customer_id’, ‘SUM(Deposit.deposit) as Deposit.deposit’
    でうまくいきませんかね?

  2. admin より:

    コメントありがとうございます。
    テスト環境が手元にないので、次の機会に試させていただきます。