Príkazy, eventy a plánovanie
| Príkaz | Účel |
|---|---|
money:currencies {--iso} {--custom} {--code=*} | Vypíše register: kód, číselný kód, exponent, symbol, názov a pôvod. |
money:rates:refresh {source=ecb} {--feed=daily} {--from=} {--to=} {--queue} | Stiahne kurzy do tabuľky. --feed je daily, recent alebo history; --queue odošle unikátny job; podporuje --isolated. |
money:rates:prune {--before=} {--keep-days=} {--include-manual} {--pretend} | Zmaže staré kurzy. Jedna hranica je povinná; manuálne riadky zostanú bez --include-manual; --pretend len spočíta. |
money:convert {amount} {from} {to} {--date=} {--driver=} | Prevedie sumu a vypíše kurz, zdroj, dátum a výsledok. |
php artisan money:currencies --custom
php artisan money:rates:refresh # ECB daily feed into the rates table
php artisan money:rates:refresh ecb --feed=recent # the last 90 days
php artisan money:rates:refresh ecb --feed=history --from=2020-01-01 --to=2020-12-31
php artisan money:rates:refresh --queue # dispatch a unique queued job instead
php artisan money:rates:refresh --isolated # keep overlapping runs out
php artisan money:rates:prune --keep-days=365 --pretend # only count
php artisan money:rates:prune --before=2024-01-01 --include-manual
php artisan money:convert 19.99 EUR USD
php artisan money:convert 19.99 EUR USD --date=2026-09-01 --driver=databasePlánovaná aktualizácia
Pri MONEY_EXCHANGE_SCHEDULE=true provider naplánuje money:rates:refresh podľa exchange.refresh.cron — 30 16 * * 1-5 v Europe/Berlin, tesne po zverejnení kurzov ECB okolo 16:00 SEČ — s withoutOverlapping() a onOneServer(). Plánovač vašej aplikácie musí bežať. Predvolene je vypnutá.
Aktualizácia cez frontu
use RoundlyConsulting\Money\Enums\EcbFeed;
use RoundlyConsulting\Money\Facades\Exchange;
use RoundlyConsulting\Money\Jobs\RefreshExchangeRates;
Exchange::rates()->refreshLater(feed: EcbFeed::Recent); // queue the refresh
// the same job, dispatched yourself: source, feed, ?from, ?to (Y-m-d)
dispatch(new RefreshExchangeRates('ecb', 'recent'));refreshLater() odošle job RefreshExchangeRates, ktorý je unikátny pre zdroj a feed počas desiatich minút a drží len skalárne hodnoty.
Aktualizácia a čistenie z kódu
use RoundlyConsulting\Money\Enums\EcbFeed;
use RoundlyConsulting\Money\Facades\Exchange;
$result = Exchange::rates()->refresh('ecb', EcbFeed::Recent); // RefreshResult
$result->stored; // rows written
$result->skippedManual; // manual rows left untouched
$result->skippedUnknownCurrency; // feed currencies the registry does not know
$result->latestDate; // ?CarbonImmutable
$deleted = Exchange::rates()->prune(now()->subYear()); // intAktualizácia predvolene pokrýva posledných 7 dní (denný feed), 90 dní (recent) alebo všetko od roku 1999 (history). Neúspešná aktualizácia nikdy nemaže riadky. Prune vráti počet zmazaných — pri pretend spočítaných — riadkov. Akcie za týmito volaniami popisuje sekcia DI a akcie.
Eventy
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Money\Events\ExchangeRatesRefreshed;
use RoundlyConsulting\Money\Events\ExchangeRatesRefreshFailed;
Event::listen(function (ExchangeRatesRefreshed $event) {
logger()->info('Exchange rates refreshed', [
'source' => $event->result->source,
'stored' => $event->result->stored,
'latest' => $event->result->latestDate?->toDateString(),
]);
});
Event::listen(function (ExchangeRatesRefreshFailed $event) {
// alert your team: $event->source, $event->message — existing rows are untouched
});- ExchangeRatesRefreshed — RefreshResult $result: source, stored, skippedManual, skippedUnknownCurrency, latestDate.
- ExchangeRatesRefreshFailed — string $source a string $message, spustí sa pred opätovným vyhodením výnimky. Sem napojte upozornenia.
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.