使用 Laravel ORM 统计每天的指标

这周工作上需要做一个管理后台的指标统计小功能(从数据查询到页面实现)。由于后台使用的是Laravel框架,自然想通过orm模型来完成查询。第一反应是通过循环语句分别统计每天的指标,最后汇总。但这样做效率太低了,故放弃之。

由于对sql语句不是很熟悉(mysql函数这块急需加强,听说mysql high performance 这本书不错,可以了解下),不知道有哪些函数可以实现我的需求,于是在google上输入自己想到的关键词--“statistics everyday data   laravel”来尝试搜索相关信息,果然第一条搜索结果就是很好的例子(在这里真心要赞叹下google的强大),原来实现这个需求要用到mysql中的date()函数,对照例子赶紧撸了一个出来。

示例代码

$days = Input::get('days', 7);

$range = \Carbon\Carbon::now()->subDays($days);

$stats = User::where('created_at', '>=', $range)
    ->groupBy('date')
    ->orderBy('date', 'DESC')
    ->remember(1440)
    ->get([
        DB::raw('Date(created_at) as date'),
        DB::raw('COUNT(*) as value')
    ])
    ->toJSON();

参考例子在这里https://gist.github.com/msurguy/9984166

页面上的统计图表这块使用了Echarts,这个是百度的一个前端团队做的,很好很强大,基本各种图表都能实现(虽然一直在抵触百度的产品,但是对于开源技术还是要持开放的态度,好东西值得表扬和赞美)。观摩效果图戳这里http://echarts.baidu.com/examples.html

既然要统计指标,肯定得有个时间段,而老板的需求又基本都是变态的,时间段选择要能满足预先设置的(比如过去一周,过去一个月,过去30天,这个月,上个月,这个季度,上个季度等)和自定义的。之前使用的是datetimepicker(文档在这里http://xdsoft.net/jqplugins/datetimepicker/)这个插件,现在已经不能满足业务需求,自己写是很难的,即使想写,老板也不会给这个时间的。于是再次求教于google,果然又找到一个能满足需求的插件daterangepicker(文档在这里http://www.daterangepicker.com/)。完成这个功能后把datetimepicker这个插件都替换为daterangepicker,丫的实在跟不上时代的脚步。使用daterangepicker过程中顺便了解了Moment.js--js中一个封装好的处理时间这块的类库,类似于php中的carbon。

以上三个方面完成了,基本能实现一个简单的指标统计模块。

开始写博客,希望坚持下去。听说技术大牛都是从开始写博客一路成长起来的:)

posted @ 2016-10-11 00:40  mayzhi  阅读(9374)  评论(0编辑  收藏  举报