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

Striktné zápisy a drift

Zdrojom pravdy je atribút modelu. So zapnutým strict_writes vyhodí uloženie zmeneného atribútu cyklu DirectStateWriteException:

Spôsob zápisuZachytenéVýsledok
$m->status = …; $m->save(), update([...]), forceFill([...])->save(), push(), increment('x', 1, ['status' => …])ánovyhodí výnimku (alebo sa prevezme v allowDirectWrites)
Model::create([...]), factories ->create() / ->state([...])vytvorenieprijme sa akýkoľvek deklarovaný stav; riadok histórie initial
factory afterCreating / seeder changing a saved model’s stateánovyhodí výnimku: obaľte do Lifecycles::allowDirectWrites() alebo seedujte s LIFECYCLE_STRICT_WRITES=false
saveQuietly(), withoutEvents(), Model::query()->update(), relation update(), upsert(), insert(), DB::table(), raw SQLnie (bez udalosti modelu)drift: prevezme sa pri ďalšej zmene alebo cez lifecycle:adopt
Lifecycles::allowDirectWrites(fn () => $listing->update(['status' => ListingStatus::Closed]));  // adopted at once

Lifecycles::for($listing)->adopt();                      // reconcile one subject now
Lifecycles::model(Listing::class)->adopt(chunk: 500);    // every row (= php artisan lifecycle:adopt)

Adopcia zapíše riadok histórie adopted, zruší plány starého stavu, naplánuje expiráciu nového stavu a odošle LifecycleAdopted a LifecycleTransitioned. Čas v prevzatom stave začína okamihom adopcie, pretože skutočný čas vstupu nie je známy. Uložený stav NULL (riadky z insert() alebo stĺpec pridaný do existujúcej tabuľky) sa nastaví na počiatočný stav. Riadok adopted sa nedá vrátiť, takže nič pod ním už vrátiť nejde.

S vypnutým strict_writes sa uloženie modelu, ktoré mení stav, prevezme okamžite — riadok histórie, plány aj udalosti. Drift po sebe nechávajú len zápisy, ktoré obchádzajú udalosti modelu.

Vývoj definície

História ukladá surové hodnoty stavov a názvy prechodov. Premenovanie prechodu urobí jeho minulé riadky nevratnými. Premenovanie alebo odstránenie stavu vyžaduje dátovú migráciu — obalenú do Lifecycles::allowDirectWrites() alebo nasledovanú php artisan lifecycle:adopt. Po každej zmene spustite php artisan lifecycle:validate.

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.