---
title: "Rollbacky a história — Lifecycle for Laravel | Roundly"
description: "Vráťte posledný prechod alebo sa vráťte k bodu v histórii — všetko alebo nič, s oknom, kompenzáciou a snapshotmi — plus nemenná história."
url: https://roundly-consulting.com/sk/open-source/navody/lifecycle-for-laravel/rollbacky-a-historia
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Lifecycle for Laravel](https://roundly-consulting.com/sk/open-source/navody/lifecycle-for-laravel.md)

# Rollbacky a história

```php
Lifecycles::for($listing)->by($user)->rollback();                 // undo the last transition
Lifecycles::for($listing)->rollbackTo($record);                   // undo everything after a history row (or its id)
Lifecycles::for($listing)->canRollback();                         // Decision
Lifecycles::for($listing)->canRollbackTo($record);                // Decision
Lifecycles::for($listing)->rollback(force: true);                 // ignore snapshot conflicts
```

Rollback vracia riadky efektívnej histórie od najnovšieho. Platí všetko alebo nič: jeden zamietnutý riadok zamietne celé volanie (RollbackDeniedException). Riadok sa dá vrátiť, ak platí všetko z tohto:

- Ide o riadok transition alebo scheduled (expiráciu vrátite prechodom vpred, napríklad reactivate).
- Jeho prechod stále existuje a nie je irreversible().
- Jeho handler je null, implementuje CompensatesTransition alebo je označený reversible(withoutCompensation: true).
- Jeho okno ešte neuplynulo (reversible(within:), inak rollback.default\_window).
- Subjekt je stále v stave, ktorý tento riadok vytvoril.
- Nie je zmrazený (pokiaľ každý vracaný prechod nemá ignoresFreeze()) ani zapečatený.
- Aktér prejde rollbackRequires() / rollbackGuard() — alebo pravidlami pre aktéra samotného prechodu (prechod so systemOnly() vyžaduje systémový kontext), takže nikto nevráti to, čo by sám nemohol urobiť.
- Dôvod sa zmestí do history.reason\_max\_length.
- Žiadny atribút v snapshote sa odvtedy nezmenil (pokiaľ nepoužijete force).
- Kvóta obnoveného stavu to dovolí, počítaná v skupine, ktorú rollback obnoví.
- Subjekt nie je soft-deleted: canRollback() odpovie subject\_trashed a rollback() vyhodí SubjectTrashedException.

Rollback obnoví stav, čas vstupu doň, počítadlá, atribúty zo snapshotu a stĺpce stampov. Zruší plány, ktoré riadok vytvoril, a znova otvorí tie, ktoré zrušil. Pridá riadky rollback; samotný rollback sa vrátiť nedá a rovnako ani riadky initial či adopted. Hooky stavu sa nespúšťajú a pokusy rate limitu sa nevracajú. Po commite sa odošle LifecycleTransitioned (druh rollback) za každý riadok rollbacku a LifecycleRolledBack raz za volanie. Jedno rollbackTo() vráti najviac rollback.max\_steps riadkov.

## História

Do histórie sa len pridáva: úprava alebo zmazanie riadku cez Eloquent vyhodí HistoryIsAppendOnlyException a riadky odstráni len lifecycle:prune (alebo vyčistenie pri trvalom zmazaní). Každý riadok zaznamená aktéra, dôvod, zvalidovaný kontext (bez citlivých kľúčov), snapshot, verziu a čas:

| Druh | Zapíše ho | Dá sa vrátiť |
| --- | --- | --- |
| `initial` | hook created alebo inicializácia stavu NULL | nie |
| `transition` | apply() / transitionTo() | áno |
| `scheduled` | sweep spúšťajúci schedule() | áno |
| `expiry` | sweep spúšťajúci expiráciu | nie — vráťte ju prechodom vpred, napríklad reactivate |
| `rollback` | krok rollbacku | nie (bez redo) |
| `adopted` | adopcia driftu | nie |

```php
Lifecycles::for($listing)->history(20);        // Collection<TransitionRecord>, newest first (default 50)
Lifecycles::for($listing)->lastTransition();   // ?TransitionRecord
$listing->lifecycleHistory()->get();           // the raw LifecycleTransition models
```

TransitionRecord vystavuje id, lifecycle, kind (TransitionKind), transition, from, to, actorType, actorId, system, reason, context, snapshot, version, revertsId, scheduleId, occurredAt a reverted.

## Čistenie

```php
use RoundlyConsulting\Lifecycle\DataTransferObjects\PruneOptions;

Lifecycles::prune(new PruneOptions(historyOlderThanDays: 365, schedulesOlderThanDays: 30));   // PruneResult
```

```bash
php artisan lifecycle:prune                                   # defaults from config
php artisan lifecycle:prune --history-days=365 --schedule-days=30 --dry-run
php artisan lifecycle:prune --database=tenant                 # another connection's package tables
```

Čistenie nikdy nevynuluje limity ani cooldowny — tie sú v zázname stavu — no zahodí body rollbacku a idempotentné kľúče staršie ako hranica. Značku, ktorú zanechá volanie neverExpire(), ponechá, kým daný pobyt trvá. --database vyčistí tabuľky balíka na inom pripojení.

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/lifecycle-for-laravel.md)
