Resúmenes
Introducción
Puedes renderizar una sección de "resumen" debajo del contenido de tu tabla. Esto es útil para mostrar resultados de cálculos como promedios, sumas, conteos y rangos de los datos en tu tabla.
Por defecto, habrá una sola línea de resumen para la página actual de datos, y una línea adicional para el total de todos los datos si hay múltiples páginas. También puedes agregar resúmenes para grupos de registros, ver "Resumir grupos de filas".
Los objetos "Summarizer" pueden añadirse a cualquier columna de tabla usando el método summarize()
:
use Filament\Tables\Columns\Summarizers\Average;
use Filament\Tables\Columns\TextColumn;
TextColumn::make('rating')
->summarize(Average::make())
Múltiples "summarizers" pueden ser añadidos a la misma columna:
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(),
])
La primera columna de una tabla no puede usar summarizers. Esa columna se usa para renderizar el título y subtítulos de la sección de resumen.
Summarizers disponibles
Filament incluye cuatro tipos de summarizer:
También puedes crear tus propios summarizers personalizados.
Average
Se usa para calcular el promedio de todos los valores:
use Filament\Tables\Columns\Summarizers\Average;
use Filament\Tables\Columns\TextColumn;
TextColumn::make('rating')
->summarize(Average::make())
Count
Se usa para contar el número total de valores en el dataset:
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)),
),
Contar ocurrencia de íconos
Con columnas tipo ícono, puedes usar icons()
:
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\Summarizers\Count;
IconColumn::make('is_published')
->boolean()
->summarize(Count::make()->icons()),
Range
Se usa para calcular el mínimo y el máximo:
use Filament\Tables\Columns\Summarizers\Range;
use Filament\Tables\Columns\TextColumn;
TextColumn::make('price')
->summarize(Range::make())
Rango de fechas
TextColumn::make('created_at')
->dateTime()
->summarize(Range::make()->minimalDateTimeDifference())
Rango de texto
TextColumn::make('sku')
->summarize(Range::make()->minimalTextualDifference())
Incluir valores nulos
TextColumn::make('sku')
->summarize(Range::make()->excludeNull(false))
Sum
Calcular la suma total:
use Filament\Tables\Columns\Summarizers\Sum;
use Filament\Tables\Columns\TextColumn;
TextColumn::make('price')
->summarize(Sum::make())
Configurar etiqueta
TextColumn::make('price')
->summarize(Sum::make()->label('Total'))
Limitar dataset con query
use Filament\Tables\Columns\Summarizers\Average;
use Illuminate\Database\Query\Builder;
TextColumn::make('rating')
->summarize(
Average::make()->query(fn (Builder $query) => $query->where('is_published', true)),
),
Formateo
Números
TextColumn::make('rating')
->summarize(Average::make()->numeric(decimalPlaces: 0))
Con locale:
TextColumn::make('rating')
->summarize(Average::make()->numeric(locale: 'nl'))
Moneda
TextColumn::make('price')
->summarize(Sum::make()->money('EUR'))
Dividir por 100:
TextColumn::make('price')
->summarize(Sum::make()->money('EUR', divideBy: 100))
Limitar longitud
TextColumn::make('sku')
->summarize(Range::make()->limit(5))
Prefijo y sufijo
use Illuminate\Support\HtmlString;
TextColumn::make('volume')
->summarize(Sum::make()
->prefix('Total volume: ')
->suffix(new HtmlString(' m³'))
)
Resúmenes personalizados
use Filament\Tables\Columns\Summarizers\Summarizer;
use Illuminate\Database\Query\Builder;
TextColumn::make('name')
->summarize(Summarizer::make()
->label('First last name')
->using(fn (Builder $query): string => $query->min('last_name')))
Ocultar condicionalmente
TextColumn::make('sku')
->summarize(Summarizer::make()
->hidden(fn (Builder $query): bool => ! $query->exists()))
Visibilidad opuesta:
TextColumn::make('sku')
->summarize(Summarizer::make()
->visible(fn (Builder $query): bool => $query->exists()))
Resumir grupos de filas
Puedes usar summaries con groups:
public function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('views_count')
->summarize(Sum::make()),
TextColumn::make('likes_count')
->summarize(Sum::make()),
])
->defaultGroup('category')
->groupsOnly();
}