yii框架结合charjs实现统计30天数据的方法
本文实例讲述了yii框架结合charjs实现统计30天数据的方法。分享给大家供大家参考,具体如下:
理论上30天数据应该都有,但实际上却不一定是,所以需要补全
publicstaticfunctiongetDayOrderCharData($days=30){ $nowDay=date('Y-m-d',strtotime('-1day'));//当前前一天 $lastDay=date("Y-m-d",strtotime('-'.$days.'day'));//days天前 $daysFormat=[]; //获取到days段的日期 for($i=$days;$i>0;$i--){ $daysFormat[]=date("Y-m-d",strtotime('-'.$i.'day')); } //所有用户 $allOrderData=self::find() ->select(['FROM_UNIXTIME(create_at,"%Y-%m-%d")aschar_time','COUNT(id)astotal_order','SUM(order_amount)astotal_order_amount','SUM(pay_amount)astotal_order_pay_amount']) ->where(['>=','FROM_UNIXTIME(create_at,"%Y-%m-%d")',$lastDay]) ->andWhere(['<=','FROM_UNIXTIME(create_at,"%Y-%m-%d")',$nowDay]) ->groupBy('char_time') ->all(); $dayCountTitle=Yii::t('backend','day_order_count_title',['last_day'=>$lastDay,'now_day'=>$nowDay]); $dayAmountTitle=Yii::t('backend','day_order_amount_title',['last_day'=>$lastDay,'now_day'=>$nowDay]); $labels=$daysFormat; //所有用户 $orderCounts=[];//订单数量 $orderAmounts=[];//订单金额 $orderPayAmounts=[];//支付金额 $allOrderDataArr=[]; foreach($allOrderDataas$allKey=>$allVal){ $allOrderDataArr[$allVal->char_time]['char_time']=$allVal->char_time; $allOrderDataArr[$allVal->char_time]['total_order']=$allVal->total_order; $allOrderDataArr[$allVal->char_time]['total_order_amount']=$allVal->total_order_amount; $allOrderDataArr[$allVal->char_time]['total_order_pay_amount']=$allVal->total_order_pay_amount; } foreach($daysFormatas$key=>$val){ if(array_key_exists($val,$allOrderDataArr)){ $orderCounts[]=$allOrderDataArr[$val]['total_order']; $orderAmounts[]=$allOrderDataArr[$val]['total_order_amount']; $orderPayAmounts[]=$allOrderDataArr[$val]['total_order_pay_amount']; }else{ $orderCounts[]='0'; $orderAmounts[]='0'; $orderPayAmounts[]='0'; } } $data=[ 'dayCountTitle'=>$dayCountTitle, 'dayAmountTitle'=>$dayAmountTitle, 'orderCountLabel'=>Yii::t('backend','day_order_count_label',['days'=>$days]), 'orderAmountLabel'=>Yii::t('backend','day_order_amount_label',['days'=>$days]), 'orderPayAmountLabel'=>Yii::t('backend','day_order_pay_amount_label',['days'=>$days]), 'nowDay'=>$nowDay, 'lastDay'=>$lastDay, 'labels'=>$labels, 'orderCounts'=>$orderCounts, 'orderAmounts'=>$orderAmounts, 'orderPayAmounts'=>$orderPayAmounts ]; return$data; }
js
//按天获取订单数量 vardayOrderCountChartCanvas=$('#dayOrderCountChart').get(0).getContext('2d') vardayOrderCountChartData={ labels:=json_encode($dayOrderChar['labels'],true)?>, datasets:[ { label:'=$dayOrderChar['orderCountLabel']?>', backgroundColor:'rgba(0,192,293,0.5)', data:=json_encode($dayOrderChar['orderCounts'],true)?> } ] } vardayOrderCountChartOptions={ scales:{ xAxes:[{ gridLines:{ display:false } }], yAxes:[{ gridLines:{ display:false } }] } } vardayOrderCountChart=newChart(dayOrderCountChartCanvas,{ type:'line', data:dayOrderCountChartData, options:dayOrderCountChartOptions }); //按天获取订单及金额 vardayOrderAmounCanvas=$('#dayOrderAmountChart').get(0).getContext('2d') vardayOrderAmounData={ labels:=json_encode($dayOrderChar['labels'],true)?>, datasets:[ { label:'=$dayOrderChar['orderAmountLabel']?>', backgroundColor:'rgba(0,192,293,0.5)', data:=json_encode($dayOrderChar['orderAmounts'],true)?> }, { label:'=$dayOrderChar['orderPayAmountLabel']?>', backgroundColor:'rgba(0,166,90,0.5)', data:=json_encode($dayOrderChar['orderPayAmounts'],true)?> } ] } vardayOrderAmounOptions={ scales:{ xAxes:[{ gridLines:{ display:false } }], yAxes:[{ gridLines:{ display:false } }] } } vardayOrderAmountChart=newChart(dayOrderAmounCanvas,{ type:'line', data:dayOrderAmounData, options:dayOrderAmounOptions });
记住,yii的as一定要在模型利定义公用变量
public$char_time;//按时间统计 public$total_order;//所有订单 public$total_order_amount;//所有订单总额 public$total_pay_order;//支付订单 public$total_pay_amount;//支付订单总额 public$total_order_pay_amount;//支付总额
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。