Laravel So fügen Sie einer vorhandenen Tabelle eine Spalte hinzu

Laravel So fügen Sie einer vorhandenen Tabelle eine Spalte hinzu

Problem

Das Hinzufügen neuer Spalten zu Ihren Laravel -Migrationen ist eine übliche Sache. Anwendungen sollen skalierbar sein, was bedeutet, dass das Hinzufügen neuer Funktionen Ihre Anwendung weiter entwickelt.

Sehr oft müssen neue Laravel -Entwickler ihre Migrationen durchführen, aber sie stellen nicht sicher, dass Migrationen mehrmals rollen und migrieren können, ohne etwas zu brechen.

Obwohl das nicht unser Fokus ist, denke ich, dass es wichtig war, festzustellen, dass wir uns vor unserem Problem befassen.

Das Folgende ist ein häufiges Problem, das neue Laravel -Entwickler versuchen werden, wenn sie einer vorhandenen Tabelle eine neue Spalte hinzufügen möchten.

Also machten sie schon so etwas wie:

öffentliche Funktion ()

Schema :: Create ('Organisationen', Funktion ($ Tabelle)
$ table-> inkremente ('id');
$ table-> string ('name')-> nullable ();
$ table-> text ('über')-> nullable ();
);

Dies erstellt eine neue Tabelle für sie. Um dies sauber zu machen, sollten Sie auch die Down -Funktion hinzufügen und in diesem Fall einfach Ihre gesamte Tabelle fallen lassen. Die Down -Funktion wird ausgeführt, wenn Sie Ihre Migration rollen möchten.

Wenn Sie all das durchspringen, wird das eigentliche Problem angezeigt, wenn sie eine Spalte vergessen, und sie möchten dies danach hinzufügen, damit sie eine neue Migrationsdatei (Klasse) erstellen. Versuchen Sie, so etwas auszuführen wie:

öffentliche Funktion ()

Schema :: Create ('Organisationen', Funktion ($ Tabelle)
$ table-> Integer ('Größe')-> nullable ();
);

Sie hoffen, der vorhandenen Tabelle eine neue Spaltengröße hinzuzufügen.

Lassen Sie uns nun sehen, was passiert und wie dies verhindern kann, dass dies wieder passiert.

Lösung

Das Hauptproblem hier ist das, was neue Entwickler häufig vermissen, zu bemerken, welcher statische Methodenname des Schemas ist . Sie verwenden Create nur, wenn Sie anfänglich Ihre Tabelle erstellen. Wenn Sie Ihre Tabelle jederzeit weiter aktualisieren müssen, möchten Sie stattdessen Tabelle verwenden.

Die Real Up -Funktion sollte also so sein:

öffentliche Funktion ()

Schema :: Tabelle ('Organisationen', Funktion ($ Tabelle)
$ table-> Integer ('Größe')-> nullable ();
);

Und die Down -Funktion wäre so:

öffentliche Funktion Down ()

Schema :: Tabelle ('Organisationen', Funktion ($ Tabelle)
$ table-> DropColumn ('Größe');
);

Mein persönlicher Vorschlag für Sie ist, dass nach dem Erstellen Ihrer neuen (ändernden) Migrationsdatei Folgendes erstellt:

  • Führen Sie die Migration aus
  • Überprüfen Sie, ob die Spalte zur Tabelle hinzugefügt wird
  • Rollback die Migration durch Ausführen von PHP Artisan Migrate: Rollback
  • Stellen Sie sicher, dass nichts passiert
  • Wiederholen Sie den Schritt 2 und 3 erneut, um sicherzustellen, dass Sie den vollen Kreis von Migratio schließen können
  • N

Noch ein Tipp

Dies wird zu einem späteren Zeitpunkt nützlich, wenn Sie Ihre Bereitstellung automatisieren möchten und Ihr Skript einen Rollback ausführen muss.

Ein weiterer Tipp, den ich Ihnen geben kann, ist zu planen, wo Sie Ihre Spalte platzieren möchten. Auf diese Weise platziert Laravel Ihre neue Spalte am Ende, wahrscheinlich nach der Spalte updatated_at. (Die meisten Tabellen haben das)

Sie möchten eine Methode danach verwenden, damit Ihr endgültiger Code so aussieht:

öffentliche Funktion ()

Schema :: Tabelle ('Organisationen', Funktion ($ Tabelle)
$ table-> Integer ('Größe')-> After ('Name')-> nullable ();
);

In diesem Fall wird Laravel Ihre neue Spalte direkt nach der Namensspalte platzieren, damit sie gut aussieht und viel besser organisiert ist.