有两种状态ORDER_PAID
和ORDER_DELIVERED
,我需要在页面上显示5个块,其中包含以下数据集:
订单总和: 数据库中的每个项目都有字段总和,我需要计算。
状态为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
获取graph \ table的数据:
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 我想从我的db中获取下一个值:
ORDER_PAID
和ORDER_DELIVERED
Highcharts::widget
和GridView::widget
来显示数据。 (这是一个可排序的表格,其中包含状态为ORDER_PAID
的订单,以及一个图表,其中显示了包含ORDER_DELIVERED
和ORDER_PAID
的每个订单的价格。答案 0 :(得分: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,
]);