汇总
概述
你可以在表格下面渲染一个汇总区域。这非常适合在表格中展示诸如平均值、总和、计数及数据范围这样的计算结果。
默认情况下,当前数据页将有一个汇总行,如果有多个页面可用,则会有一个额外的汇总行用于所有数据的汇总。你也可以为记录分组添加汇总,请查看"汇总行分组"。
使用 summarize()
方法,"汇总器(Summarizer)" 对象可以被添加到任何表格列中:
use Filament\Tables\Columns\Summarizers\Average;
use Filament\Tables\Columns\TextColumn;
TextColumn::make('rating')
->summarize(Average::make())
可以将多个 "summarizer" 添加到同一个列:
use Filament\Tables\Columns\Summarizers\Average;
use Filament\Tables\Columns\Summarizers\Range;
use Filament\Tables\Columns\TextColumn;
TextColumn::make('rating')
->numeric()
->summarize([
Average::make(),
Range::make(),
])
表格的第一个列不能使用汇总。该列用于摘要部分的标题和副标题。
可用汇总器
Filament 带有 4 中类型的汇总器:
你也可以创建自定义汇总器。
Average
平均值(Average)可用于计算数据集中所有值的平均值:
use Filament\Tables\Columns\Summarizers\Average;
use Filament\Tables\Columns\TextColumn;
TextColumn::make('rating')
->summarize(Average::make())
本例中,表格中所有的 rating 都会加总起来并除以 rating 的数量。
Count
计数(Count)可用于计算数据集的总数。除非你只想计算行数,你可能也需要设置数据集的范围:
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\Summarizers\Count;
use Illuminate\Database\Query\Builder;
IconColumn::make('is_published')
->boolean()
->summarize(
Count::make()->query(fn (Builder $query) => $query->where('is_published', true)),
),
本例中,表格将会计算发布了多少文章。
统计图标出现的次数
在图标列中使用计数,可以使用 icons()
方法,使用户对表格中每个图标的数量有一个直观的了解:
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\Summarizers\Count;
use Illuminate\Database\Query\Builder;
IconColumn::make('is_published')
->boolean()
->summarize(Count::make()->icons()),
Range
范围(Range)可用于计算数据集中的最小值和最大值:
use Filament\Tables\Columns\Summarizers\Range;
use Filament\Tables\Columns\TextColumn;
TextColumn::make('price')
->summarize(Range::make())
本例中,可以看到表格中的最低价和最高价。
日期范围
使用 minimalDateTimeDifference()
方法,你可以将范围格式化为日期:
use Filament\Tables\Columns\Summarizers\Range;
use Filament\Tables\Columns\TextColumn;
TextColumn::make('created_at')
->dateTime()
->summarize(Range::make()->minimalDateTimeDifference())
该方法将会显示最小日期和最大日期之间的最小差异。比如:
- 如果最小日期和最大日期是不是同一天,则只会显示日期。
- 如果最小日期和最大日期是同一天的不同时间,日期和时间都会显示。
- 如果最小和最大日期和时间都是相同的,则只会显示一次。