flowframe / laravel-trend
Easily generate model trends
Fund package maintenance!
larsklopstra
Installs: 1 210 643
Dependents: 23
Suggesters: 0
Security: 0
Stars: 796
Watchers: 4
Forks: 73
Open Issues: 18
Requires
- php: ^8.2
- illuminate/contracts: ^8.37|^9|^10.0|^11.0
- spatie/laravel-package-tools: ^1.4.3
Requires (Dev)
- nunomaduro/collision: ^5.3|^6.1|^8.0
- orchestra/testbench: ^6.15|^7.0|^8.0|^9.0
- pestphp/pest: ^1.18|^2.34
- pestphp/pest-plugin-laravel: ^1.1|^2.3
- spatie/laravel-ray: ^1.23
- vimeo/psalm: ^4.8|^5.6
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 four 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.