Есть 2 статусы ORDER_PAID
и ORDER_DELIVERED
, и мне нужно, чтобы отобразить 5 блоков на странице со следующими наборами данных:Yii2 понимание DataProvider
Общая сумма заказов: Каждый элемент в базе данных имеет сумму поля, что я нужно рассчитывать.
Сумма заказов со статусом
ORDER_PAID
- Сумма заказов со статусом
ORDER_DELIVERED
- график, который показывает корреляцию между заказами с
ORDER_PAID
иORDER_DELIVERED
статусов - Таблица, которая содержит только заказы с
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 Я хочу получить следующие значения из моей БД:
- Общая сумма заказов для текущего пользователя.
- Чтобы получить общую сумму заказов для текущего пользователя, я должен рассчитать суммы для того, с статусами
ORDER_PAID
иORDER_DELIVERED
- Я также использовать
Highcharts::widget
иGridView::widget
для отображения данных. (Это сортируется таблица, которая содержит заказы со статусомORDER_PAID
и графиком, который показывает цену для каждого заказа сORDER_DELIVERED
иORDER_PAID
.
объяснений вашего вопроса не ясно мне .. могли бы вы опубликовать образец и результат вам нужно? – scaisEdge
@scaisEdge, я добавил раздел 'UPD 1'. Пожалуйста, проверь это. – Ascelhem
ОК .. несколько лучше .. Глядя на ваш код .. например, функция getOrderPaidSum(), я не понимаю, зачем вам нужны модели, а не простой результат суммы .. Кажется, вы хотите, чтобы все модели для вычисления суммы в php .. .. Но правильный подход для меня должен быть другим. – scaisEdge