NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

HasLifecycle pridáva query scopes pre stĺpec stavu aj pre záznamy a plány balíka:

Listing::query()->whereState(ListingStatus::Active)->get();
Listing::query()->whereState([ListingStatus::Active, ListingStatus::Closed])->get();
Listing::query()->whereNotState(ListingStatus::Archived)->get();
Listing::query()->whereExpiringWithin('3 days')->get();       // expires after now, within 3 days
Listing::query()->whereExpired()->get();                       // expiry passed (in grace or not yet swept)
Listing::query()->whereNotExpired()->get();
Listing::query()->whereInGrace()->get();
Listing::query()->whereFrozen()->get();
Listing::query()->whereInStateFor('14 days')->get();           // entered the current state at least 14 days ago
Listing::query()->withLifecycle()->paginate();                 // eager-load records, open schedules and latest history rows

Order::query()->whereState(PaymentStatus::Captured, 'payment_status')->get();
ScopeVyberie
whereState($states, ?$lifecycle)Riadky v jednom zo stavov (stav alebo pole).
whereNotState($states)Doplnok.
whereExpired()Expirácia uplynula (v ochrannej lehote alebo ešte nespracovaná sweepom).
whereNotExpired()Bez uplynutej čakajúcej expirácie.
whereExpiringWithin('3 days')Vyprší po teraz, v rámci intervalu.
whereInGrace()Vypršané, ale expiračný prechod ešte nie je na rade.
whereFrozen()Práve zmrazené.
whereInStateFor('14 days')Do aktuálneho stavu vstúpili aspoň pred týmto časom.
withLifecycle()Eager-loadne záznamy stavu, otvorené plány a najnovšie riadky histórie.

Stavy sa overujú voči definícii; nedeklarovaný stav vyhodí UnknownStateException. Každý scope prijíma voliteľný názov cyklu (predvolene prvý cyklus modelu). whereState() a whereNotState() filtrujú vlastný stĺpec modelu, ktorý je zdrojom pravdy; scopes pre expiráciu, zmrazenie a čas v stave sú poddotazy EXISTS nad tabuľkami balíka a kombinujú sa s vašimi ďalšími scopes aj so SoftDeletes.

Ako sa vyhnúť N+1

Čítania z handlu (enteredAt(), version(), isFrozen(), expiresAt(), scheduled(), lastTransition(), …) použijú eager-loadnuté vzťahy, ak sú načítané, inak spravia dotaz. LifecycleResource prijme aj priamo model, takže zoznam načíta stav, zmrazenie, expiráciu a posledný prechod bez dotazu na každý model:

// A list: a model stands for its primary lifecycle, with the actor from auth
return LifecycleResource::collection(Listing::query()->withLifecycle()->get());

allowedTransitions() aj tak spúšťa pipeline kontrol pre každý subjekt, takže guardy, Gate policies a počty kvót môžu robiť vlastné dotazy. Stĺpec cyklu indexujte spolu so stĺpcami scope kvót.

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 kryptomien

Odoslaní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.