spatie / laravel-stats
跟踪应用程序统计变化
Requires
- php: ^8.0
- illuminate/contracts: ^8.73|^9.0|^10.0|^11.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- doctrine/dbal: ^3.6
- nesbot/carbon: ^2.63|^3.0
- orchestra/testbench: ^6.23|^7.0|^8.0|^9.0
- phpunit/phpunit: ^9.4|^10.0
README
此包是一个轻量级的解决方案,用于总结数据库随时间的变化。以下是一个快速示例,我们将跟踪订阅和取消的数量随时间的变化。
首先,您应该创建一个统计类。
use Spatie\Stats\BaseStats; class SubscriptionStats extends BaseStats {}
然后,当有人订阅时,您可以调用它上的 increase
,当有人取消计划时,调用 decrease
。
SubscriptionStats::increase(); // execute whenever somebody subscribes SubscriptionStats::decrease() // execute whenever somebody cancels the subscription;
有了这个,您可以查询统计。以下是如何按周获取过去两个月的订阅统计。
use Spatie\Stats\StatsQuery; $stats = SubscriptionStats::query() ->start(now()->subMonths(2)) ->end(now()->subSecond()) ->groupByWeek() ->get();
这将返回如下数组
[ [ 'start' => '2020-01-01', 'end' => '2020-01-08', 'value' => 102, 'increments' => 32, 'decrements' => 20, 'difference' => 12, ], [ 'start' => '2020-01-08', 'end' => '2020-01-15', 'value' => 114, 'increments' => 63, 'decrements' => 30, 'difference' => 33, ], ]
支持我们
我们投入了大量资源来创建 一流的开放式软件包。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢您从家乡寄来明信片,说明您正在使用我们的哪个(些)包。您可以在 我们的联系页面 上找到我们的地址。我们将所有收到的明信片发布在 我们的虚拟明信片墙上。
安装
您可以通过 composer 安装此包
composer require spatie/laravel-stats
您必须使用以下命令发布和运行迁移
php artisan vendor:publish --provider="Spatie\Stats\StatsServiceProvider" --tag="stats-migrations" php artisan migrate
用法
步骤 1:创建一个统计类
首先,您应该创建一个统计类。此类负责配置特定统计数据的存储方式。默认情况下,它不需要任何配置。
use Spatie\Stats\BaseStats; class SubscriptionStats extends BaseStats {}
默认情况下,类的名称将用于在数据库中存储统计信息。要自定义使用的键,请使用 getName
。
use Spatie\Stats\BaseStats; class SubscriptionStats extends BaseStats { public function getName() : string{ return 'my-custom-name'; // stats will be stored with using name `my-custom-name` } }
步骤 2:调用 increase 和 decrease 或设置一个固定值
接下来,当统计信息应该更改时,您可以调用 increase
、decrease
。在这种情况下,当有人订阅时,应该调用 increase
,当有人取消计划时,调用 decrease
。
SubscriptionStats::increase(); // execute whenever somebody subscribes SubscriptionStats::decrease(); // execute whenever somebody cancels the subscription;
除了手动增加和减少统计信息之外,您还可以直接设置它。这对于您的特定统计信息不是由您的应用程序计算,而是存在于其他地方很有用。使用订阅示例,让我们假设订阅存在于其他地方,并且有一个 API 调用来获取计数。
$count = AnAPi::getSubscriptionCount(); SubscriptionStats::set($count);
默认情况下,increase
、decrease
和 set
方法假设导致您的统计数据更改的事件是立即发生的。您可以选择将这些方法作为第二个参数传递一个日期时间。您的统计数据更改将记录为在那个时刻发生。
SubscriptionStats::increase(1, $subscription->created_at);
步骤 3:查询统计数据
有了这些,您可以查询统计数据。您可以获取特定时期的统计数据,并按分钟、小时、天、周、月或年分组。
以下是如何按周获取过去两个月的订阅统计。
$stats = SubscriptionStats::query() ->start(now()->subMonths(2)) ->end(now()->subSecond()) ->groupByWeek() ->get();
这将返回一个包含可转换为数组的 Spatie\Stats\DataPoint
对象的数组。这些对象可以像这样转换为数组
// output of $stats->toArray(): [ [ 'start' => '2020-01-01', 'end' => '2020-01-08', 'value' => 102, 'increments' => 32, 'decrements' => 20, 'difference' => 12, ], [ 'start' => '2020-01-08', 'end' => '2020-01-15', 'value' => 114, 'increments' => 63, 'decrements' => 30, 'difference' => 33, ], ]
扩展用法
从自定义模型读取和写入
- 使用
type (string)
、value (bigInt)
、created_at
、updated_at
字段创建一个新表 - 创建一个模型并添加
HasStats
-trait
StatsWriter::for(MyCustomModel::class)->set(123) StatsWriter::for(MyCustomModel::class, ['custom_column' => '123'])->increase(1) StatsWriter::for(MyCustomModel::class, ['another_column' => '234'])->decrease(1, now()->subDay()) $stats = StatsQuery::for(MyCustomModel::class) ->start(now()->subMonths(2)) ->end(now()->subSecond()) ->groupByWeek() ->get(); // OR $stats = StatsQuery::for(MyCustomModel::class, ['additional_column' => '123']) ->start(now()->subMonths(2)) ->end(now()->subSecond()) ->groupByWeek() ->get();
从 HasMany-关系读取和写入
$tenant = Tenant::find(1) StatsWriter::for($tenant->orderStats(), ['payment_type_column' => 'recurring'])->increment(1) $stats = StatsQuery::for($tenant->orderStats(), , ['payment_type_column' => 'recurring']) ->start(now()->subMonths(2)) ->end(now()->subSecond()) ->groupByWeek() ->get();
测试
composer test
变更日志
请参阅变更日志获取关于最近更改的更多信息。
贡献
请参阅贡献指南获取详细信息。
安全漏洞
请审查我们的安全策略了解如何报告安全漏洞。
鸣谢
许可协议
MIT 许可协议 (MIT)。请参阅许可文件获取更多信息。