Dotazovanie
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();| Scope | Vyberie |
|---|---|
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 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.