Laravel come aggiungere la colonna a una tabella esistente

Laravel come aggiungere la colonna a una tabella esistente

Problema

L'aggiunta di nuove colonne alle tue migrazioni di Laravel è una cosa comune. Le applicazioni sono pensate per essere scalabili, il che significa che l'aggiunta di nuove funzionalità sviluppa ulteriormente l'applicazione.

Molto spesso, i nuovi sviluppatori di Laravel devono eseguire le loro migrazioni ma non si assicurano che le migrazioni possano rollback e migrare più volte senza rompere nulla.

Anche se questo non è il nostro obiettivo, penso che sia stato importante affermare che prima di andare nel nostro problema.

Quello che segue è un problema comune che i nuovi sviluppatori di Laravel proveranno a fare quando vogliono aggiungere una nuova colonna a una tabella esistente.

Quindi a questo punto hanno già fatto qualcosa di simile:

funzione pubblica up ()

Schema :: create ('Organizations', Function ($ Table)
$ table-> increment ('id');
$ table-> string ('name')-> nulllable ();
$ table-> text ('about')-> nulllable ();
);

Questo creerà una nuova tabella per loro. E per renderlo pulito, dovresti anche aggiungere la funzione giù e semplicemente lasciarti cadere l'intero tavolo in questo caso. La funzione giù verrà eseguita quando si desidera far rollback sulla migrazione.

Saltando attraverso tutto ciò, il vero problema viene visualizzato quando dimenticano una colonna e vogliono aggiungerlo in seguito in modo che creino un nuovo file di migrazione (classe) prova a eseguire qualcosa di simile:

funzione pubblica up ()

Schema :: create ('Organizations', Function ($ Table)
$ table-> integer ('size')-> nulllable ();
);

Sperano di aggiungere una nuova dimensione della colonna alla tabella esistente.

Ora vediamo cosa succede e come impedire che ciò accada di nuovo.

Soluzione

Il problema principale qui è ciò che i nuovi sviluppatori tendono spesso a mancare a notare quale è il nome del metodo statico dello schema . Usi Crea solo quando inizialmente stai creando la tua tabella. Se è necessario aggiornare ulteriormente la tabella in qualsiasi momento, si desidera invece utilizzare la tabella.

Quindi la vera funzione dovrebbe essere così:

funzione pubblica up ()

Schema :: Table ('Organizations', Function ($ Table)
$ table-> integer ('size')-> nulllable ();
);

E la funzione down sarebbe così:

funzione pubblica down ()

Schema :: Table ('Organizations', Function ($ Table)
$ table-> dropcolumn ('size');
);

Il mio suggerimento personale per te è che dopo aver creato il tuo nuovo file di migrazione (alterazioni) fai quanto segue:

  • Eseguire la migrazione
  • Controlla se la colonna viene aggiunta alla tabella
  • Rollback La migrazione eseguendo PHP Artisan Migrate: Rollback
  • Assicurati che non accada nulla
  • Ripeti di nuovo il passaggio 2 e 3 per assicurarti di poter chiudere il cerchio completo di migrio
  • N

Un altro consiglio

Questo sarà utile in una fase successiva se si desidera automatizzare la distribuzione e il tuo script deve eseguire un rollback.

Un altro consiglio che posso darti è pianificare dove vuoi posizionare la tua colonna. Solo facendo questo, Laravel posizionerà la tua nuova colonna alla fine, probabilmente dopo la colonna aggiornata_at. (La maggior parte delle tabelle ha questo)

Vuoi usare un metodo dopo il tuo codice finale sembrerebbe così:

funzione pubblica up ()

Schema :: Table ('Organizations', Function ($ Table)
$ table-> integer ('size')-> dopo ('name')-> nulllable ();
);

In questo caso, Laravel posizionerà la tua nuova colonna subito dopo la colonna Nome in modo che sia bella e sia organizzata molto meglio.