Mohmad-Zarifiyan / laravel-chart
一款Laravel包,帮助您快速从数据库中创建图表。
3.0.0
2024-04-15 18:34 UTC
Requires
- php: ^8
- ext-curl: *
- laravel/framework: >=7
This package is auto-updated.
Last update: 2024-09-23 20:23:14 UTC
README
该Laravel包可以帮助您轻松使用Eloquent ORM导出用于图表的数据。
安装
要安装包,只需在项目根目录下运行以下命令
composer require mohammad-zarifiyan/laravel-chart:^3.0
实现
首先,您需要将特性 MohammadZarifiyan\LaravelChart\Traits\HasChart
应用到您的模型上。然后使用 exportForChart
方法来提取数据。
- 该方法的第一参数必须是
Carbon\CarbonPeriod
的一个实例,它指定了整个时间段的开始和结束。 - 该方法的第二参数必须是一个闭包,其第一个参数是
Illuminate\Database\Eloquent\Builder
的一个实例,第二个参数是Carbon\CarbonPeriod
的一个实例。在这个闭包中,您必须对Illuminate\Database\Eloquent\Builder
应用条件,以限制数据到Carbon\CarbonPeriod
提供的时间段,然后返回图表所需的数据。
exportForChart
方法的返回值是一个包含您在闭包中返回的数据的 Illuminate\Support\Collection
实例,因此您可以在图表中使用这些数据。
示例
在以下示例中,我们计算了一个星期前到现在的每一天发票的 amount
列的总和。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use MohammadZarifiyan\LaravelChart\Traits\HasChart; class Invoice extends Model { use HasChart; protected $fillable = [ 'amount', ]; protected $casts = [ 'amount' => 'integer', ]; public function payment() return $this->belongsTo(Payment::class); } }
<?php use App\Models\Invoice; use Carbon\CarbonInterval; use Carbon\CarbonPeriod; use Illuminate\Support\Carbon; use Illuminate\Database\Eloquent\Builder; $start = Carbon::now()->subDays(6)->startOfDay(); $end = Carbon::now(); $interval = CarbonInterval::day(); $period = CarbonPeriod::start($start)->setEndDate($end)->setDateInterval($interval); $output = Invoice::exportForChart($period, function (Builder $builder, CarbonPeriod $period) { $builder->whereBetween('created_at', $period); return $builder->sum('amount'); });
上述代码的输出将类似于
[ 2, // Sum amount, 6 days ago (all day) 50, // Sum amount, 5 days ago (all day) 49, // Sum amount, 4 days ago (all day) 85, // Sum amount, 3 days ago (all day) 140,// Sum amount, 2 days ago (all day) 110,// Sum amount, 1 days ago (all day) 80, // Sum amount, today (till now) ]
您还可以根据关联中的列过滤表格数据。在下面的示例中,我们根据他们的 payment time
获取发票金额的总和。
<?php use App\Models\Invoice; use Carbon\CarbonInterval; use Carbon\CarbonPeriod; use Illuminate\Support\Carbon; use Illuminate\Database\Eloquent\Builder; $start = Carbon::now()->subDays(6)->startOfDay(); $end = Carbon::now(); $interval = CarbonInterval::day(); $period = CarbonPeriod::start($start)->setEndDate($end)->setDateInterval($interval); $output_for_chart = Invoice::exportForChart($period, function (Builder $builder, CarbonPeriod $period) { $builder->whereRelation('payment', fn (Builder $builder) => $builder->whereBetween('paid_at', $period)); return $builder->sum('amount'); });