Tabulka
MetricColumn
Číslo čtené jako měření: hodnota a volitelně trend za ní.
Na této stránce
Číslo čtené jako měření: hodnota a volitelně trend, který za ní stojí.
use NyonCode\WireTable\Columns\MetricColumn;
Jak to funguje
Nic neagreguje. Tečková notace už převádí cestu přes relaci na withCount /
withSum poddotaz, takže MetricColumn::make('orders.count') je pořád ten jeden
dotaz, co byl vždycky — viz Cesty přes relace. Co ten typ
přidává, je prezentace:
- výchozí hodnoty pro čísla, sdílené s MoneyColumn — zarovnání doprava, tabulární číslice, nezalamování — takže čísla lícují po sloupci dolů a stacked mobilní karta si metriku vezme jako svoje hlavní číslo;
- volitelný trend vykreslený vedle čísla jako jedna SVG polyline.
Základní použití
MetricColumn::make('orders.count')->label('Objednávky') // withCount, dopravaMetricColumn::make('items.sum.amount')->label('Objem') // withSumMetricColumn::make('open_tickets') // obyčejný sloupec taky funguje
Přidání trendu
MetricColumn::make('orders.count') ->label('Objednávky') ->trend(fn (Customer $record): array => $record->orders_per_month)
Řada je obyčejné pole čísel v pořadí čtení, od nejstaršího. Kreslí ji stejná geometrie, jakou používá stats widget, takže buňka tabulky a dlaždice na dashboardu ukazují pro stejná data stejný tvar.
Řadu dodáváte vy, a to schválně
Řadu pro každý záznam nejde odvodit z cesty toho sloupce: objednávky po měsících pro tohohle zákazníka je druhý tvar dotazu, ne formátování toho prvního. Closure drží to rozhodnutí — i případné N+1 — tam, kde je vidět.
// Správně: řada přijde se stránkou a closure ji jen čte.public function table(Table $table): Table{ return $table ->model(Customer::class) ->query(fn ($query) => $query->withCount('orders')->with('monthlyTotals')) ->columns([ TextColumn::make('name')->sortable(), MetricColumn::make('orders_count') ->label('Objednávky') ->trend(fn (Customer $r): array => $r->monthlyTotals ->pluck('total')->all()), ]);} // Špatně: tohle se zeptá jednou za řádek, přesně jak to je napsané.->trend(fn (Customer $r): array => $r->orders()->sum('total') ? [] : [])
Jak musí řada vypadat
| Řada | Vykreslí se jako |
|---|---|
[1, 5, 3] |
křivka |
[4, 4, 4] |
rovná čára středem — stabilní, ne spadlé na nulu |
[7] |
rovná čára; jedno čtení není trend, ale není to ani nic |
[4, null, 4] |
ta dvě čtení, která byla — viz níže |
[] |
vůbec nic: buňka je obyčejné číslo |
Nečíselná čtení se zahazují, nepřevádějí. null měsíc znamená „žádné
čtení“ a vykreslit ho jako 0 si vymyslí propad na dno a zpátky, který se nikdy
nestal.
Barva trendu
Tah se řídí barvou sloupce, nebo tou, která je řečená jen pro trend:
MetricColumn::make('churn')->color('danger') // číslo i čáraMetricColumn::make('orders.count')->trend($series, 'success') // jen čára
Přepsání výchozích hodnot
MetricColumn::make('orders.count') ->alignment('left') // …a přestává být metrikou stacked karty ->textSize('lg')
MetricColumn API
->trend(Closure $callback, ?string $color = null) // fn (Model $record): array<int, int|float>->hasTrend(): bool->getTrend(Model $record): array->getTrendColorClass(): string
Všechno z TextColumn — formátování, limity, prefixy, souhrny — platí beze změny.