本文实例讲述了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 ; // 支付总额 |
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/tang05709/article/details/102885033