2016-09-11 7 views
0

あり2つのステータスORDER_PAIDORDER_DELIVEREDがあると私は、次のデータセットをページ上の5つのブロックを表示する必要があります。注文のYii2理解するdataProvider

  1. 総合計: 各項目は、データベースには、フィールドの合計を持って、私はそのカウントする必要があります。ステータスステータスのオーダーのORDER_PAID

  2. 合計と注文の

  3. 合計ORDER_DELIVERED

  4. ORDER_PAIDORDER_DELIVEREDステータスのオーダーとの間の相関関係を表示したグラフ
  5. ORDER_PAIDステータスとのみ注文を含むテーブル。

上記のすべては、ユーザーによって選択されたデータ(日付、先週、先月の間)によって異なります。グラフ\テーブルのデータをfetchs

function getOrderPaidSum(){ 
     return Orders::find() 
       ->where(["owned" => \Yii::$app->user->id]) 
       ->andWhere(["status.code" => "ORDER_PAID"]) 
       ->sum(); 
    } 

getOrdersContext

function getOrdersContext($params){ 

    $query = Orders::find() 
     ->where(["owned" => \Yii::$app->user->id]) 
     ->orderBy('id DESC'); 

    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
    ]); 

    if(!($this->load($params) && $this->validate())){ 
     return $dataProvider; 
    } 

    $query->andFilterWhere([]); 
    return $dataProvider; 
} 

4要求たとえば

getOrderDeliveredSum() + getOrderPaidSum() = getTotal()

私が機能を持っているにもありますしかし、あなたが見ることができるように、同じ目的のために同じデータをフェッチする要求があります。最適化の機会はありますか?

UPD 1私は私のDBからの次の値を取得したい

  1. 現在のユーザーのための注文の合計。私はまた、データを表示するためにHighcharts::widgetGridView::widgetを使用する状況ORDER_PAIDORDER_DELIVERED
  2. で注文の合計を計算する必要があり、現在のユーザーのための注文の合計を取得するには
  3. 。 (これは、ステータスORDER_PAIDORDER_DELIVEREDORDER_PAIDと各注文の価格を表示するグラフで注文を含んでソート可能なテーブルです。
+0

質問の説明がわかりません。サンプルと結果を投稿できますか? – scaisEdge

+0

@scaisEdge、セクション 'UPD 1'を追加しました。これをチェックしてください。 – Ascelhem

+0

OK ..いくつか良い..あなたのコードを見て..関数getOrderPaidSum()私は単純な合計結果の代わりに、すべてのモデルを必要とする理由は理解していない..あなたは、私の正しいアプローチは違うはずです。 – scaisEdge

答えて

0

簡単な方法は、あなたが別途、その後

myTotalPaid = Orders::find() 
      ->where(["owned" => \Yii::$app->user->id]) 
      ->andWhere(["status.code" => "ORDER_PAID"]) 
      ->sum('my_column_for_sum'); 


myTotalDelivered = Orders::find() 
      ->where(["owned" => \Yii::$app->user->id]) 
      ->andWhere(["status.code" => "ORDER_DELIVERED"]) 
      ->sum('my_column_for_sum');  

必要がある2点の合計を計算でありますORDER_PAIDのデータプロバイダを取得

$query = Orders::find() 
      ->where(["owned" => \Yii::$app->user->id]) 
      ->andWhere(["status.code" => "ORDER_PAID"]) 
      ->orderBy('id DESC'); 

$dataProvider = new ActiveDataProvider([ 
    'query' => $query, 
]); 
関連する問題