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程序设计有所帮助。