---
title: "Vrátenie importu — Imports for Laravel | Roundly"
description: "Vrátenie v časovom okne — vytvorené záznamy bez zmeny sa zmažú alebo odovzdajú vášmu háčiku, zmenené sa ponechajú v zozname, aktualizácie sa nevracajú."
url: https://roundly-consulting.com/sk/open-source/navody/imports-for-laravel/vratenie-importu
language: sk
---

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

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

# Vrátenie importu

```php
$batch->canRollback();            // completed / failed / cancelled, before undo_until, no rollback yet (or a failed one)
$batch->rollback();
$batch->rollbackReport();         // RollbackReport (null while a queued rollback runs)
```

V rámci imports.undo.window (P7D) a po authorize(Rollback) sa spracujú riadky evidencie označené ako created, ktoré ešte neboli vrátené — priamo do preview.sync\_threshold, inak ako job batch — každý záznam vo vlastnej transakcii:

- Záznam sa načíta cez scope vlastníka vrátane soft-deleted, so zámkom riadka — úprava medzi kontrolou a zmazaním počká a potom sa prejaví. Neexistuje alebo je v koši → missing.
- Bez uloženého kontrolného súčtu → kept\_changed s dôvodom no\_checksum: nič nedokazuje, že sa nezmenil. Stane sa to, keď import nedokázal vytvorený záznam spätne načítať cez dopyt vlastníka (ownership() a create() si odporujú) — import to nahlási.
- Zmenený od importu → kept\_changed: podľa kontrolného súčtu (predvolene — nové načítanie surových atribútov bez kľúča a časových pečiatok, takže samotné touch() nie je zmena, ale tichý hromadný update áno) alebo podľa updated\_at (ChangeDetection::updatedAt()).
- Inak váš háčik rollback(): Deleted (predvolené), Handled alebo Kept.
- Zmazanie, ktoré vyhodí výnimku (cudzí kľúč vo vašej schéme) → failed s dôvodom; ostatné pokračujú.

Aktualizácie sa nikdy nevracajú a prepojené (linked) záznamy sa nikdy nemenia. Evidencia zaznamená každý výsledok v tej istej transakcii, takže opakované vrátenie nič neurobí dvakrát a druhé vrátenie nemá žiadny účinok. Vrátenie, ktoré skončilo stavom rollback\_failed, spustí ImportRollbackFailed a kým je okno otvorené, dá sa spustiť znova — už vrátené riadky sa preskočia.

Každá časť vrátenia sa ráta ako priebeh, takže imports:sweep nikdy nevzdá dlhé vrátenie, ktoré stále postupuje. Job batch vrátenia pripúšťa zlyhania: jedna zlyhaná časť vrátenie neukončí, kým ostatné časti ešte bežia — skončí stavom rollback\_failed (chunk\_failed), keď sa dávka dokončí.

## Výsledky

| RollbackOutcome | Význam |
| --- | --- |
| `deleted` | Od importu nezmenený a zmazaný — predvolený háčik rollback(). |
| `handled` | Váš háčik rollback() ho vrátil inak (zrušená pozvánka). |
| `kept` | Váš háčik rollback() ho ponechal. |
| `kept_changed` | Od importu zmenený — podľa kontrolného súčtu alebo updated\_at — alebo bez uloženého súčtu (dôvod no\_checksum): ponechaný a uvedený v zozname. |
| `missing` | Už neexistuje alebo je v koši. |
| `failed` | Zmazanie vyhodilo výnimku (cudzí kľúč aplikácie) — dôvod sa uloží, ostatné pokračujú. |

## Report vrátenia

```php
$report = $batch->rollbackReport();

$report->deleted; $report->handled; $report->keptChanged; $report->keptByHook;
$report->linked; $report->missing; $report->failed;
$report->keptTotal();
foreach ($report->kept as $view) {   // ImportedRecordView
    $view->rowNumber; $view->record; $view->action; $view->rollbackOutcome; $view->rollbackReason;
}
```

## Vlastné vrátenie

Ak chcete záznam vrátiť inak — zrušiť namiesto zmazania — prepíšte na importéri rollback():

```php
use RoundlyConsulting\Imports\Enums\RollbackOutcome;

public function rollback(Model $record, ImportContext $context): RollbackOutcome
{
    if ($record->accepted_at !== null) {
        return RollbackOutcome::Kept;      // leave it alone
    }

    $record->revoke();                     // undone another way

    return RollbackOutcome::Handled;       // the default deletes it: RollbackOutcome::Deleted
}
```

## Rozpoznanie zmien

Observer modelu, ktorý záznam upraví hneď po importe, spôsobí, že záznam vyzerá zmenený. Takéto atribúty vynechajte v checksumAttributes(), porovnávané atribúty uveďte cez ChangeDetection::checksum(\[...\]) alebo prejdite na ChangeDetection::updatedAt():

```php
public function checksumAttributes(Model $record): array
{
    // an observer stamps last_synced_at right after the import — ignore it
    return Arr::except($record->getAttributes(), ['id', 'created_at', 'updated_at', 'last_synced_at']);
}
```

Po uplynutí okna rollback() vyhodí UndoWindowClosedException (409).

## 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/imports-for-laravel.md)
