在日常开发中,我们经常需要为应用生成各种图表或报告,比如用户增长趋势、订单月度汇总等等。如果每次都手动查询和聚合数据,不仅繁琐,而且容易出错。Laravel Trend 就是为了解决这个问题而生的!
它可以让你用非常流畅(fluent)的方式,按分钟、小时、天、月、年等不同时间维度,对模型的平均值(average)、最小值(min)、最大值(max)、总和(totals/sum)以及计数(count)进行聚合。从此,生成趋势数据不再是件痛苦的事!
安装 🚀
通过 Composer 安装非常简单:
composer require flowframe/laravel-trend
如何使用?💡
要为你的模型生成趋势,只需导入 Flowframe\Trend\Trend
类,并传入模型或查询构造器即可。
一些例子:
use Flowframe\Trend\Trend;
use App\Models\User; // 假设你的用户模型
// 统计本年度每个月的用户总数
$trend = Trend::model(User::class)
->between(
start: now()->startOfYear(), // 今年年初
end: now()->endOfYear(), // 今年年尾
)
->perMonth() // 按月聚合
->count(); // 统计数量
// 统计过去11年间(包含今年),名字以 'a' 开头的用户的平均体重,结果按年分组
$trend = Trend::query(User::where('name', 'like', 'a%')) // 使用查询构造器进行更细致的筛选
->between(
start: now()->startOfYear()->subYears(10), // 10年前的年初
end: now()->endOfYear(), // 今年年尾
)
->perYear() // 按年聚合
->average('weight'); // 计算 'weight' 字段的平均值
核心用法:::model()
与 ::query()
你必须通过 ::model()
或 ::query()
来启动一个趋势分析。
::model(YourModel::class)
:直接对整个模型进行分析。
::query(YourModel::query()->where(...))
: 允许你传入一个 Eloquent 查询构造器,进行更细致的数据筛选。
示例:
// 直接分析 Order 模型每天的订单数
Trend::model(Order::class)
->between(...)
->perDay()
->count();
// 分析已支付且已发货的订单每天的数量
Trend::query(
Order::query()
->hasBeenPaid() // 假设你有这些 scope
->hasBeenShipped()
)
->between(...)
->perDay()
->count();
时间间隔 ⏰
你可以使用以下时间间隔进行聚合:
perMinute()
- 每分钟
perHour()
- 每小时
perDay()
- 每天
perMonth()
- 每月
perYear()
- 每年
聚合操作 📊
支持以下聚合函数:
sum('column')
- 求和
average('column')
- 平均值
max('column')
- 最大值
min('column')
- 最小值
count('*')
(或 count()
) - 计数
自定义日期列 🗓️
默认情况下,laravel-trend
假定你的模型中有一个名为 created_at
的日期列。如果你的模型使用了不同的日期列名(比如 published_at
、order_date
等),或者你想基于其他日期列进行分析,可以使用 dateColumn(string $column)
方法指定。
示例:
Trend::model(Order::class)
->dateColumn('paid_at') // 假设你想基于支付时间进行分析
->between(...)
->perDay()
->count();
这使得处理具有自定义日期列名称的模型,或基于不同日期列分析数据变得非常灵活。
支持的数据库驱动 💾
目前支持以下四种主流数据库驱动:
- MySQL
- MariaDB
- SQLite
- PostgreSQL
安全漏洞 🛡️
如果发现任何安全漏洞,请查阅项目的安全策略(通常在项目的 SECURITY.md
或文档中)来了解如何报告。
鸣谢 🙏
许可证 📄
该扩展采用 MIT 许可证。更多信息请查看项目仓库中的 LICENSE.md
文件。
—
总结一下:
Laravel Trend 是一个非常实用且优雅的工具,可以大大简化我们生成数据趋势分析的流程。如果你也经常和各种报表打交道,不妨试试看!
项目地址: https://github.com/Flowframe/laravel-trend (记得把这个链接加上哦!)
希望这个扩展能帮助到大家!如果你有任何使用心得或问题,欢迎在评论区交流!👍