yii框架结合charjs实现统计30天数据的方法
这篇文章主要介绍了yii框架结合charjs实现统计30天数据的方法,涉及Yii框架日期运算、数据查询相关操作技巧,需要的朋友可以参考下
本文实例讲述了yii框架结合charjs实现统计30天数据的方法。分享给大家供大家参考,具体如下:
理论上30天数据应该都有,但实际上却不一定是,所以需要补全
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | public static function getDayOrderCharData( $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") as char_time' , 'COUNT(id) as total_order' , 'SUM(order_amount) as total_order_amount' , 'SUM(pay_amount) as total_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 ( $allOrderData as $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 ( $daysFormat as $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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | // 按天获取订单数量 var dayOrderCountChartCanvas = $( '#dayOrderCountChart' ).get(0).getContext( '2d' ) var dayOrderCountChartData = { labels : <?= json_encode($dayOrderChar[ 'labels' ], true ) ?>, datasets: [ { label : '<?= $dayOrderChar[' orderCountLabel '] ?>' , backgroundColor : 'rgba(0, 192, 293, 0.5)' , data : <?= json_encode($dayOrderChar[ 'orderCounts' ], true ) ?> } ] } var dayOrderCountChartOptions = { scales: { xAxes: [{ gridLines: { display: false } }], yAxes: [{ gridLines: { display: false } }] } } var dayOrderCountChart = new Chart(dayOrderCountChartCanvas, { type: 'line' , data: dayOrderCountChartData, options: dayOrderCountChartOptions }); // 按天获取订单及金额 var dayOrderAmounCanvas = $( '#dayOrderAmountChart' ).get(0).getContext( '2d' ) var dayOrderAmounData = { 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 ) ?> } ] } var dayOrderAmounOptions = { scales: { xAxes: [{ gridLines: { display: false } }], yAxes: [{ gridLines: { display: false } }] } } var dayOrderAmountChart = new Chart(dayOrderAmounCanvas, { type: 'line' , data: dayOrderAmounData, options: dayOrderAmounOptions }); |
记住,yii的as一定要在模型利定义公用变量
1 2 3 4 5 6 | public $char_time ; // 按时间统计 public $total_order ; // 所有订单 public $total_order_amount ; // 所有订单总额 public $total_pay_order ; // 支付订单 public $total_pay_amount ; // 支付订单总额 public $total_order_pay_amount ; // 支付总额 |