2016-11-01 13 views
0

cakephp2でしばらくコード化しました。私は年と月ごとに計算された値を持つテーブルを使用します。例: cakefp 2.xから3.xへの移行クエリからグループ化された結果

YEAR | MONTH | VALUENAME | VALUE 
2011 | 1  | value1 | 100 
2011 | 2  | value1 | 120 
2011 | 1  | value2 | 1234 
2011 | 2  | value2 | 4342 
etc. 

ここで、「valuename」ごとに年額合計値を設定します。 Cake2で 私は私が(私の見解のために重要である)配列キーとして年だ結果、取得するには、次の式を使用:私は次しまった私のモデル「集約」で

$yearvalues = $this->Aggregation->find('list', [ 
"fields" => ['Aggregation.value_name', 'Aggregation.sum_value', 'Aggregation.y'], 
"group" => ['Aggregation.y', 'Aggregation.value_name'] 
]); 

を:

次のように
public $virtualFields = array(
     'sum_value' => "sum(value)", 
    ); 

結果が探している:

Array 
(
    [2011] => Array 
     (
      [value1] => 1429.00 
      [value2] => 1180.00 
      [value3] => 0.00 
      [value4] => 804.00 
     ) 

    [2012] => Array 
     (
      [value1] => 1878.00 
      [value2] => 2793.00 
      [value3] => 3900.00 
      [value4] => 1606.00 
     ) 
    ... 
) 

は、どのように私はCake3に今と同じ結果を得るのですか。私は私が今までに得たものだ :-(正しい方法でクエリオブジェクトを処理する方法について混乱して少しだ:

$yearvalues->select(['Aggregation.value_name', 
'sum_value' => $yearvalues->func()->sum('Aggregation.value'), 'y']) 
->group(['Aggregation.y', 'Aggregation.value_name']); 

誰かが正しいアプローチで私を助けることができる

THX あなたはあまりにもCakePHPの3.xの中で、このためlistファインダーを使用することができオリバー

答えて

0

、それは同様のオプションをサポートしています。

$yearvalues 
    ->find('list', [ 
     'keyField' => 'value_name', 
     'valueField' => 'sum_value', 
     'groupField' => 'y' 
    ]) 
    ->select([ 
     'Aggregation.value_name', 
     'sum_value' => $yearvalues->func()->sum('Aggregation.value'), 
     'Aggregation.y' 
    ]) 
    ->group([ 
     'Aggregation.y', 
     'Aggregation.value_name' 
    ]); 

listファインダは基本的に結果検索の書式設定にはCollection::combine()を使用する結果フォーマッタを追加するだけで、フィールドオプションにエイリアスを使用しないため、プロパティ/フィールド名インデックスを持つエンティティ/配列のみが表示されます!

を参照してください。
関連する問題