marotdc/laravel-metrics

轻松生成模型的指标和趋势数据,用于您的仪表盘。

2.6.x-dev 2023-10-11 02:49 UTC

This package is auto-updated.

Last update: 2024-09-11 04:38:13 UTC


README

Latest Version on Packagist Total Downloads

轻松生成模型的指标和趋势数据,用于您的仪表盘。

安装

composer require marotdc/laravel-metrics

功能

  • MySQL 支持
  • 详细的查询构建器
  • 自定义列和表定义
  • 使用 Carbon 进行天和月的翻译

使用方法

使用 Eloquent 查询

在控制器中导入 Eliseekn\LaravelMetrics\LaravelMetrics 类,并按以下方式使用:

  • 基本用法
// generate trends of products amount's sum for the current year
LaravelMetrics::query(Product::query())
    ->count()
    ->byMonth()
    ->trends();

// generate trends of orders amount's sum for the last 6 months of the current year including current month
LaravelMetrics::query(Order::query())
    ->sum('amount')
    ->byMonth(6)
    ->trends();

// generate total orders amount's sum
LaravelMetrics::query(Order::query())
    ->sum('amount')
    ->byYear()
    ->metrics(); 

// generate total product count for the current day
LaravelMetrics::query(Product::query())
    ->count()
    ->byDay(1)
    ->metrics();
  • 使用自定义查询
LaravelMetrics::query(
    Post::query()->where('user_id', auth()->id())
)
    ->count()
    ->byDay()
    ->trends();
  • 使用自定义日期列
LaravelMetrics::query(Post::query())
    ->count()
    ->byDay()
    ->dateColumn('published_at')
    ->trends();
  • 使用日期范围
LaravelMetrics::query(Post::query()))
    ->count()
    ->between('2020-05-01', '2022-08-21')
    ->trends();
  • 使用自定义标签列
LaravelMetrics::query(Order::query())
    ->count()
    ->byMonth(12)
    ->labelColumn('status')
    ->trends();
  • 使用自定义表
LaravelMetrics::query(
    Order::query()->join('users', 'orders.id', 'users.order_id')
)
    ->count()
    ->table('users')
    ->labelColumn('name')
    ->trends();

使用查询构建器

LaravelMetrics::query(
    DB::table('orders')
)
    ->sum('amount')
    ->byMonth()
    ->trends();

使用特性

HasMetrics 特性添加到您的模型中,并按以下方式使用:

Order::metrics()
    ->sum('amount')
    ->byMonth()
    ->trends();

时间段类型

LaravelMetrics::query(...)
    ->byDay(int $count = 0) // or
    ->byWeek(int $count = 0) // or
    ->byMonth(int $count = 0) // or
    ->byYear(int $count = 0) // or
    ->between(string $startDate, string $endDate, string $dateIsoFormat)

注意: 默认情况下,时间段定义为当前日、周、月或年。但是,您可以使用专用方法定义特定值。例如

// generate trends of orders count for the year 2023
LaravelMetrics::query(Order::query())
    ->count()
    ->byMonth(12)
    ->forYear(2023)
    ->labelColumn('status')
    ->trends();

// generate total orders amount's sum for the third month only
LaravelMetrics::query(Product::query())
    ->sum('amount')
    ->byMonth(1)
    ->forMonth(3)
    ->metrics();
LaravelMetrics::query(...)
    ->forDay(int $day)
    ->forWeek(int $week)
    ->forMonth(int $month)
    ->forYear(int $year)

注意: 当使用 'between' 时间段时,请确保使用 'fillEmptyDates' 方法自动用默认值填充任何缺失的日期。例如

LaravelMetrics::query(...)
    ->count()
    ->between(Carbon::now()->subDays(10)->format('Y-m-d'), Carbon::now()->format('Y-m-d'))
    ->fillEmptyDates()
    ->trends();

聚合类型

LaravelMetrics::query(...)
    ->count(string $column = 'id') // or
    ->average(string $column) // or
    ->sum(string $column) // or
    ->max(string $column) // or
    ->min(string $column)

数据类型

LaravelMetrics::query(...)
    ->trends() // or
    ->metrics()

翻译

天和月份名称自动使用 config(app.locale) 进行翻译,除 'week' 时间段外。

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全

如果您发现任何安全问题,请通过电子邮件 eliseekn@gmail.com 而不是使用问题跟踪器。

鸣谢

许可

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。

演示

您可以在 这里 找到演示项目。

Laravel 包模板

此包是用 Laravel 包模板 生成的。