flowframe/laravel-trend

Easily generate model trends

Fund package maintenance!
larsklopstra

Installs: 562 499

Dependents: 14

Suggesters: 0

Security: 0

Stars: 492

Watchers: 3

Forks: 61

Open Issues: 18

v0.2.0 2024-03-14 13:45 UTC

This package is auto-updated.

Last update: 2024-04-14 14:03:10 UTC


README

Generate trends for your models. Easily generate charts or reports.

Why?

Most applications require charts or reports to be generated. Doing this over again, and again can be a painful process. That's why we've created a fluent Laravel package to solve this problem.

You can aggregate average, min, max, and totals per minute, hour, day, month, and year.

Installation

You can install the package via composer:

composer require flowframe/laravel-trend

Usage

To generate a trend for your model, import the Flowframe\Trend\Trend class and pass along a model or query.

Example:

// Totals per month
$trend = Trend::model(User::class)
    ->between(
        start: now()->startOfYear(),
        end: now()->endOfYear(),
    )
    ->perMonth()
    ->count();

// Average user weight where name starts with a over a span of 11 years, results are grouped per year
$trend = Trend::query(User::where('name', 'like', 'a%'))
    ->between(
        start: now()->startOfYear()->subYears(10),
        end: now()->endOfYear(),
    )
    ->perYear()
    ->average('weight');

Starting a trend

You must either start a trend using ::model() or ::query(). The difference between the two is that using ::query() allows you to add additional filters, just like you're used to using eloquent. Using ::model() will just consume it as it is.

// Model
Trend::model(Order::class)
    ->between(...)
    ->perDay()
    ->count();

// More specific order query
Trend::query(
    Order::query()
        ->hasBeenPaid()
        ->hasBeenShipped()
)
    ->between(...)
    ->perDay()
    ->count();

Interval

You can use the following aggregates intervals:

  • perMinute()
  • perHour()
  • perDay()
  • perMonth()
  • perYear()

Aggregates

You can use the following aggregates:

  • sum('column')
  • average('column')
  • max('column')
  • min('column')
  • count('*')

Date Column

By default, laravel-trend assumes that the model on which the operation is being performed has a created_at date column. If your model uses a different column name for the date or you want to use a different one, you should specify it using the dateColumn(string $column) method.

Example:

Trend::model(Order::class)
    ->dateColumn('custom_date_column')
    ->between(...)
    ->perDay()
    ->count();

This allows you to work with models that have custom date column names or when you want to analyze data based on a different date column.

Drivers

We currently support three drivers:

  • MySQL
  • MariaDB
  • SQLite
  • PostgreSQL

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.