Jak bezpečně vrátit poslední migraci v Laravelu
Vracení migrací zpět je běžnou součástí vývoje Laravelu, zejména při opakovaných změnách schématu. Nesprávný postup však může vést ke ztrátě dat nebo nekonzistentním stavům. Tento návod vysvětluje, jak bezpečně vrátit poslední migraci v Laravelu, kdy používat jednotlivé příkazy a jak správně zacházet s produkčním prostředím.
Kontrola stavu migrace
Před vrácením zpět vždy ověřte aktuální stav migrace:
php artisan migrate:status
Zobrazí se seznam všech migrací se sloupcem stavu (Ran?). Pomůže vám ověřit, které migrace jsou aktivní a do které dávky patří.
Simulace vrácení zpět bez provedení změn
Laravel poskytuje režim suchého spuštění pomocí volby --pretend. Tento příkaz zobrazí příkazy SQL, které by se provedly při zpětném přechodu, aniž by byly použity.
php artisan migrate:rollback --pretend
To je užitečné zejména pro ověření, k jakým změnám dojde před skutečným vrácením databáze. Pomáhá zabránit náhodné ztrátě dat nebo schématu.
Vrácení poslední migrace
Zpětné vrácení pouze poslední dávka migrací (poslední spuštění), použijte:
php artisan migrate:rollback
Zpětné vrácení pouze poslední migrace, použít:
php artisan migrate:rollback --step=1
Příklad
Pokud jste dosud provedli tři migrační dávky:
| Dávka | Migrace |
|---|---|
| 1 | 2024_10_01_000000_create_users |
| 2 | 2024_10_02_000000_create_posts |
| 3 | 2024_10_03_000000_add_status_to_posts |
| 3 | 2024_10_03_000000_add_slug_to_posts |
Běh:
php artisan migrate:rollback
zruší pouze šarže 3 odstranění posledních dvou migrací.
Za běhu:
php artisan migrate:rollback --step=1
zruší pouze poslední migraci (2024_10_03_000000_add_slug_to_posts), čímž se odstraní poslední migrace.
Zpětné vrácení a opětovná migrace poslední migrace
vrácení poslední dávky a její okamžité opětovné použití (užitečné pro rychlou lokální iteraci):
php artisan migrate:refresh --step=1
Tento příkaz kombinuje vrácení a migraci do jedné akce, což je ideální pro testování nedávných změn schématu.
Bezpečný návrat do výroby
V produkčních prostředích mohou akce rollback způsobit. ztráta dat nebo prostoje. Laravel vyžaduje potvrzení, aby byl chráněn před náhodným opuštěním schématu:
php artisan migrate:rollback --force
php artisan migrate:rollback --step=1 --force
Bezpečná praxe
- Vždy zálohovat databázi před vrácením do výroby.
- Zajistěte, aby každá migrace
down()metoda čistě vrací změny (např. vypustí sloupce, cizí klíče nebo tabulky, které byly vytvořeny v programuup()). - Použijte funkci Laravel
Schema::hasTable()aSchema::hasColumn()kontroly, aby metody rollbacku byly idempotentní a nedocházelo k výjimkám.
Příklad metody Safe Down:
public function down(){ if (Schema::hasColumn('posts', 'status')) { Schema::table('posts', function (Blueprint $table) { $table->dropColumn('status'); }); }}
Závěrečný bezpečnostní kontrolní seznam
- Spustit
migrate:statuspotvrdit, které migrace ovlivňujete. - Použití režimu suchého běhu pomocí volby --pretend ověřit změny, aniž by byly skutečně spuštěny.
- Zajištění zálohování před vrácením zpět.
- Dvakrát zkontrolujte
down()metody pro reverzibilitu a bezpečnost. - Použijte
--stepa--forcevlajky záměrně (nikdy ne naslepo). - Pro výrobu, testování zpětných kopií ve staging první.