shanjing/laravel-statistics

一个Laravel统计库

v0.2.8 2023-10-13 09:37 UTC

README

shanjing laravel-statistics是一个基于laravel开发的统计工具,只需少量代码即可快速构建功能完善的统计模块。开箱即用,非常适合后端开发者。

功能特性

  • 简洁优雅的API
  • 当缺失对应日期的数据时,自动补充0作为默认数据
  • 使用json格式存储数据,易于扩展字段,存储更优雅

环境

  • PHP > 7.4
  • Laravel 8.*
  • MySQL 8.*

安装

如果在安装过程中遇到composer下载速度慢或安装失败的情况,请运行命令composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/composer镜像更换为阿里云镜像。

首先需要安装laravel框架,如果已经安装可以跳过此步骤。如果您是第一次使用laravel,请务必先阅读文档 《Laravel中文文档》安装

composer create-project --prefer-dist laravel/laravel 项目名称 7.*
#
composer create-project --prefer-dist laravel/laravel 项目名称

安装完laravel后需要修改.env文件,设置正确的数据库连接设置

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=root
DB_PASSWORD=

安装laravel-statistics

cd {项目名称}
$ composer require shanjing/laravel-statistics -vvv

然后运行以下命令发布资源:

php artisan laravel-statistics:publish

该命令会生成配置文件config/statistics.php,可以在其中修改数据库连接和表名,建议使用默认配置不修改。


// 指定数据库链接.
'connection' => '',

// 指定表名,如果后期修改数据库表名,这里也需要修改成对应的表名.
'statistics_table' => 'laravel_statistics',

然后运行以下命令完成安装:

  • 注意:由于运行安装是针对具体的迁移文件,迁移文件名不可以修改。
    • 文件:"2021_09_22_083561_create_statistics_table.php",
    • 目录:项目目录/database/migrations/
php artisan laravel-statistics:install

使用

完成上述步骤后即可使用统计功能

  • 使用统计表统计数据和读取数据

读取数据

// 今天淘宝销量、销售额
// period   year | month | week | day
// orderBy  desc | asc
app('statistics')
->get("taobao", ['gmv', 'order_num'])
->period('day')
->orderBy("desc")
->exec();

// 20210901~20210921 淘宝销量、销售额
app('statistics')
->get("taobao", ['gmv', 'order_num'])
->occurredBetween([20210901, 20210921])
->period('day')
->orderBy("desc") 
->exec();

存储数据

// 更新数据
// $arr: 会已 json 的格式存储在 data 列
// taobao: 存储在 key 列
// occurredAt: 存储在 occurred_at 列
$arr = ['gmv'=>'value', 'order_num'=>'value'];
app('statistics')
->save("taobao", $arr)
->occurredAt(20210921)
->exec();
  • 使用已有的model展示实时数据

1)向需要统计功能的model引入statistics模块

<?php
  
namespace App\Models\Order;
  
use Illuminate\Database\Eloquent\Model;
use Shanjing\LaravelStatistics\Traits\Statistics;
  
class Order extends Model
{ 
    use Statistics;
  
    protected $table = '';
  
    protected $connection = '';
}

2)在调用的controller里,调用

// period   year | month | week | day
// occurredBetween 时间范围
// orderBy  desc | asc
Order::period("day")
   ->occurredBetween(["20210718", "20210921"])
   ->selectRaw('count(id) as total') // 支持 select 语句
   ->selectRaw('SUM(`price`) as gmv') // 支持 select 语句
   ->orderBy('desc')
   ->summary();

贡献者

此项目归功于所有贡献者。[贡献]

您可以通过以下三种方式之一进行贡献:

  1. 使用问题跟踪器提交错误报告。
  2. 问题跟踪器上回答问题或修复错误。
  3. 贡献新功能或更新wiki。

代码贡献过程不是很正式。您只需确保遵循PSR-0、PSR-1和PSR-2编码规范。任何新的代码贡献都必须伴随着适用的单元测试。

许可证

MIT