Rimozione sicura della migrazione in Laravel


206

In Laravel, sembra esserci un comando per creare una migrazione, ma non rimuoverlo.

Crea comando di migrazione:

php artisan migrate:make create_users_table

Se voglio eliminare la migrazione, posso semplicemente eliminare in modo sicuro il file delle migrazioni corrispondente nella cartella database / migrations?

File delle migrazioni:

2013_05_31_220658_create_users_table

Risposte:


375

Ho accidentalmente creato una migrazione con un nome errato (comando:) php artisan migrate:make. Non ho eseguito ( php artisan migrate) la migrazione, quindi ho deciso di rimuoverlo. I miei passi:

  1. Elimina manualmente il file di migrazione in app/database/migrations/my_migration_file_name.php
  2. Ripristina i file di caricamento automatico del compositore: composer dump-autoload
  3. Rilassare

Se hai eseguito la migrazione ( php artisan migrate), puoi farlo:

a) Esegui migrate:rollback: è il modo giusto per annullare l'ultima migrazione (Thnx @Jakobud)

b) Se migrate:rollbacknon funziona, fallo manualmente (ricordo i bug con migrate: rollback nelle versioni precedenti):

  1. Elimina manualmente il file di migrazione in app/database/migrations/my_migration_file_name.php
  2. Ripristina i file di caricamento automatico del compositore: composer dump-autoload
  3. Modifica il tuo database: rimuovi l'ultima voce dalla tabella delle migrazioni

2
Grazie. Il gottcha per me dopo aver cancellato una migrazione stava dimenticando di eseguire il dump-autoload del compositore
Theo Kouzelis,

7
Se hai eseguito la migrazione, il modo "corretto" consiste migrate:rollbacknell'eseguire il rollback della migrazione, quindi eliminare il file di migrazione e scaricare il caricamento automatico. Non è necessario hackerare il db o la tabella delle migrazioni.
Jake Wilson,

ottima risposta per i passaggi successivi (php artisan migrate) (Y)
Imran Khan,

Io e il mio Dio ci siamo tormentati quando mi sbagliavo. Grazie.
Pablo Contreras,

4. Eliminare la tabella effettiva dal DB
Jin

64

Se la migrazione è stata eseguita (leggi: migrato), è necessario ripristinare la migrazione per cancellare la cronologia dalla tabella del database. Una volta eseguito il rollback, dovresti essere in grado di eliminare in modo sicuro il tuo file di migrazione e quindi procedere nuovamente con la migrazione.


Tuttavia, non ha eseguito la migrazione. Non puoi ripristinare ciò che non hai effettivamente fatto, vero?
Stephane,

9
No, non è possibile, ma in tal caso non dovrebbe esserci alcuna cronologia memorizzata nel database delle migrazioni, il che significa che è possibile eliminare in sicurezza il file.
Jason Lewis,

14
 php artisan migrate:fresh

Dovrebbe fare il lavoro, se sei in sviluppo e il risultato desiderato è ricominciare tutto da capo.

In produzione, forse non è la cosa desiderata, quindi dovresti essere pubblicizzato. (Il comando migrate: fresh eliminerà tutte le tabelle dal database e quindi eseguirà il comando migrate).


5
3 voti positivi? l'OP ha chiesto un modo per eliminare una migrazione, non distruggere e aggiornare l'intero database. Questo è un consiglio terribile, non farlo se non sai cosa stai facendo.
Arrivederci

leggi gentilmente la differenza tra migrare: aggiorna e migra: fresco hai visto descrivere il primo, il successivo in modo parziale ripristina evitando il lavoro manuale!
Joash

1
migrate: fresh elimina immediatamente TUTTE le tabelle e esegue nuovamente le migrazioni come se fossero in esecuzione per la prima volta. Non c'è nulla di parziale al riguardo .. qualsiasi dato sarà sparito. Risolverà il problema ma non è una risposta valida alla domanda.
Arrivederci

12

Probabilmente dovrai anche eliminare la voce dalla tabella delle migrazioni.


7

Ho creato accidentalmente due volte create_users_table. Ha ignorato alcune classi e ha trasformato il rollback in ErrorException.

Quello che devi fare è trovare autoload_classmap.php nella cartella fornitore / compositore e cercare la specifica riga di codice come

'CreateUsersTable' => $baseDir . '/app/database/migrations/2013_07_04_014051_create_users_table.php',

e modifica percorso. Quindi il rollback dovrebbe andare bene.


Se, come ho fatto io, hai appena seguito e rinominato un file di migrazione, questa è la risposta che stai cercando! Grazie.
Berdus,

2
Potresti anche semplicemente fare "composit dumpautoload"
FooBar il

5

Sono d'accordo con le risposte attuali, voglio solo aggiungere qualche informazione in più.

Una nuova funzionalità è stata aggiunta a Laravel 5.3 e versioni successive che ti consentiranno di uscire da una singola migrazione:

php artisan migrate:rollback --step=1

dopo, Elimina manualmente il file di migrazione in database/migrations/my_migration_file_name.php

Questa è un'ottima funzionalità per l'esecuzione di una migrazione

In questo modo, puoi rimuovere in sicurezza la migrazione in laravel solo in 2 passaggi


0

Preferirò farlo manualmente

  1. Elimina prima il modello (se non lo fai) è più necessario il modello
  2. Elimina la migrazione da ...database/migrations cartella
  3. Se hai già eseguito la migrazione, ad esempio se hai già eseguito php artisan migrate , accedere a phpmyadmin o SQL (a seconda del caso) e nel database, eliminare la tabella creata dalla migrazione
  4. Sempre all'interno del database, nella cartella migrazioni, individuare la riga con il nome del file di migrazione ed eliminare la riga.

Funziona per me, spero che sia d'aiuto!


-2

Questo funziona per me:

  1. Ho eliminato tutte le tabelle nel mio database, principalmente la tabella delle migrazioni.
  2. php artisan migrate:refresh

in laravel 5.5.43

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.