Rýchly štart
Metriku vytvoríte inline cez fasádu Metrics — bez vlastnej triedy. Zvoľte typ, agregáciu nad Eloquent dotazom a obdobie:
use App\Models\User;
use RoundlyConsulting\Metrics\Enums\Period;
use RoundlyConsulting\Metrics\Facades\Metrics;
$data = Metrics::value()
->count(User::query())
->name('New users')
->range(Period::Today)
->withChangeAgainstPreviousPeriod()
->toArray();Fasáda ponúka jeden builder pre každý typ metriky — Metrics::value(), Metrics::trend(), Metrics::progress() a Metrics::partition():
Metrics::value()->count(User::query())->range(Period::Today)->toArray();
Metrics::trend()->count(User::query(), 'created_at')->daily()->range(Period::MonthToDate)->toArray();
Metrics::progress()->sum(Order::query(), 'total')->target(10000)->range(Period::MonthToDate)->toArray();
Metrics::partition()->count(User::query(), 'plan')->toArray();Čítanie výsledku
Každá metrika ponúka dva pohľady na ten istý výpočet: result() — typovaný objekt výsledku (ValueResult, TrendResult, ProgressResult alebo PartitionResult) pre PHP kód, ktorý s číslami pracuje — a toArray(), obálku pripravenú pre JSON a frontend. Oba idú cez cache výsledkov:
$revenue = Metrics::value()->sum(Order::query(), 'total')->range(Period::ThisMonth)->result();
$revenue->value(); // 15230.0
$revenue->change(); // percentage change, when a comparison was requested
Metrics::trend()->count(User::query(), 'id')->daily()->result()->values(); // list<float>
Metrics::get('revenue')->result()->value(); // the typed result of a registered metricObálka (envelope)
toArray() metriku vyhodnotí a vráti jednotnú obálku — prezentačné polia, zvolené a dostupné obdobia a výsledok podľa typu:
[
'name' => 'New users', // name(), or the humanized class name
'description' => '', // description()
'prefix' => '', // prefix()
'suffix' => '', // suffix()
'range' => [
'current' => 'TODAY', // the selected Period value
'available' => ['7' => '7 Days', '14' => '14 Days', /* … */ 'ALL' => 'All'],
'custom' => ['start' => null, 'end' => null],
],
'result' => [ // the type-specific result
'value' => 42.0,
'previous' => 30.0,
'change' => ['percentage' => 40.0, 'is_increase' => true],
],
]Inline metrikám nastavte name(): bez neho je názvom v obálke poľudštený názov triedy, čo je pri inline builderi samotný builder („Pending Value“).
Vrátenie z controllera
Každá metrika implementuje Responsable, takže ju controller môže vrátiť priamo a Laravel pošle obálku ako JSON. Autorizácia zostáva na vašej aplikácii:
use App\Models\User;
use RoundlyConsulting\Metrics\Enums\Period;
use RoundlyConsulting\Metrics\Facades\Metrics;
final class NewUsersController
{
public function __invoke()
{
return Metrics::value()
->count(User::query())
->name('New users')
->range(Period::Today)
->withChangeAgainstPreviousPeriod();
}
}Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.