2016-09-11 4 views
0

Есть 2 статусы ORDER_PAID и ORDER_DELIVERED, и мне нужно, чтобы отобразить 5 блоков на странице со следующими наборами данных:Yii2 понимание DataProvider

  1. Общая сумма заказов: Каждый элемент в базе данных имеет сумму поля, что я нужно рассчитывать.

  2. Сумма заказов со статусом ORDER_PAID

  3. Сумма заказов со статусом ORDER_DELIVERED
  4. график, который показывает корреляцию между заказами с ORDER_PAID и ORDER_DELIVERED статусов
  5. Таблица, которая содержит только заказы с ORDER_PAID статусом ,

Все перечисленное зависит от данных, которые выбраны пользователем (между датами, прошлой неделей, в прошлом месяце). Есть также 4 запрос

getOrderDeliveredSum() + getOrderPaidSum() = getTotal()

Например, у меня есть функция, которая:

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

А также getOrdersContext что fetchs данные для графа \ таблицы:

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

Но, как вы видите, есть запрос, который извлекает одни и те же данные, но для разных целей. Есть ли возможности для оптимизации?

UPD 1 Я хочу получить следующие значения из моей БД:

  1. Общая сумма заказов для текущего пользователя.
  2. Чтобы получить общую сумму заказов для текущего пользователя, я должен рассчитать суммы для того, с статусами ORDER_PAID и ORDER_DELIVERED
  3. Я также использовать Highcharts::widget и GridView::widget для отображения данных. (Это сортируется таблица, которая содержит заказы со статусом ORDER_PAID и графиком, который показывает цену для каждого заказа с ORDER_DELIVERED и ORDER_PAID.
+0

объяснений вашего вопроса не ясно мне .. могли бы вы опубликовать образец и результат вам нужно? – scaisEdge

+0

@scaisEdge, я добавил раздел 'UPD 1'. Пожалуйста, проверь это. – Ascelhem

+0

ОК .. несколько лучше .. Глядя на ваш код .. например, функция getOrderPaidSum(), я не понимаю, зачем вам нужны модели, а не простой результат суммы .. Кажется, вы хотите, чтобы все модели для вычисления суммы в php .. .. Но правильный подход для меня должен быть другим. – 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');  

затем получить поставщика данных для ORDER_PAID

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

$dataProvider = new ActiveDataProvider([ 
    'query' => $query, 
]); 
Смежные вопросы