124 lines
2.9 KiB
Markdown
124 lines
2.9 KiB
Markdown
# Laravel Trend
|
|
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```php
|
|
// 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.
|
|
|
|
```php
|
|
// 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:
|
|
|
|
```php
|
|
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](../../security/policy) on how to report security vulnerabilities.
|
|
|
|
## Credits
|
|
|
|
- [Lars Klopstra](https://github.com/flowframe)
|
|
- [All Contributors](../../contributors)
|
|
|
|
## License
|
|
|
|
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.
|