yii框架结合charjs实现统计30天数据的方法


Posted in PHP onApril 04, 2020

本文实例讲述了yii框架结合charjs实现统计30天数据的方法。分享给大家供大家参考,具体如下:

理论上30天数据应该都有,但实际上却不一定是,所以需要补全

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

// 按天获取订单数量
  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一定要在模型利定义公用变量

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

PHP 相关文章推荐
php 获取当前访问的url文件名的方法小结
Feb 08 PHP
PHP的变量总结 新手推荐
Apr 18 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
php获取目标函数执行时间示例
Mar 04 PHP
使用php语句将数据库*.sql文件导入数据库
May 05 PHP
php实现mysql事务处理的方法
Dec 25 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
分享10段PHP常用代码
Nov 11 PHP
详解php中 === 的使用
Oct 24 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 PHP
laravel 框架执行流程与原理简单分析
Feb 01 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 #PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 #PHP
phpQuery采集网页实现代码实例
Apr 02 #PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 #PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 #PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 #PHP
TP5框架实现上传多张图片的方法分析
Mar 29 #PHP
You might like
用Php实现链结人气统计
2006/10/09 PHP
php生成文件
2007/01/15 PHP
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
js实现拖拽功能
2017/03/01 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
Vue 嵌套路由使用总结(推荐)
2020/01/13 Javascript
JS实现网页烟花动画效果
2020/03/10 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
让Python代码更快运行的5种方法
2015/06/21 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
python super()函数的基本使用
2020/09/10 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
应届毕业生自荐信例文
2014/02/26 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
2015年纪委工作总结
2015/05/13 职场文书
外出听课学习心得体会
2016/01/15 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
利用python进行数据加载
2021/06/20 Python
Python初学者必备的文件读写指南
2021/06/23 Python
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS