laravel

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 weiterentwickelt.

Sehr oft müssen neue Laravel-Entwickler ihre Migrationen ausführen, aber sie stellen nicht sicher, dass Migrationen mehrmals zurückgesetzt und migriert werden können, ohne dass etwas kaputt geht.

Das ist zwar nicht unser Fokus, aber ich denke, es war wichtig, dies zu sagen, bevor wir uns unserem Problem widmen.

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.

Zu diesem Zeitpunkt haben sie also schon etwas gemacht wie:

öffentliche Funktion nach oben()

Schema::create('organizations', function ($table)
$table->inkremente('id');
$table->string('name')->nullable();
$table->text('about')->nullable();
);

Dadurch wird eine neue Tabelle für sie erstellt. Und um das sauber zu machen, sollten Sie auch die Down-Funktion hinzufügen und in diesem Fall einfach Ihren gesamten Tisch fallen lassen. Die Down-Funktion wird ausgeführt, wenn Sie Ihre Migration rückgängig machen möchten.

Wenn sie all das durchgehen, zeigt sich das eigentliche Problem, wenn sie eine Spalte vergessen und diese danach hinzufügen möchten, damit sie eine neue Migrationsdatei (Klasse) erstellen und versuchen, etwas wie folgt auszuführen:

öffentliche Funktion nach oben()

Schema::create('organizations', function ($table)
$table->integer('size')->nullable();
);

Sie hoffen, der bestehenden Tabelle eine neue Spaltengröße hinzufügen zu können.

Schauen wir uns nun an, was passiert und wie man das verhindert.

Lösung

Das Hauptproblem hier ist, was neue Entwickler oft übersehen, was der statische Methodenname des Schemas ist . Sie verwenden create nur, wenn Sie Ihre Tabelle zum ersten Mal erstellen. Wenn Sie Ihre Tabelle jederzeit weiter aktualisieren müssen, möchten Sie stattdessen Tabelle verwenden.

Die echte Aufwärtsfunktion sollte also so aussehen:

öffentliche Funktion nach oben()

Schema::table('organizations', function ($table)
$table->integer('size')->nullable();
);

Und die Down-Funktion sieht so aus:

öffentliche Funktion down()

Schema::table('organizations', function($table)
$table->dropColumn('Größe');
);

Mein persönlicher Vorschlag an Sie ist, dass Sie nach dem Erstellen Ihrer neuen (ändernden) Migrationsdatei Folgendes tun:

Noch ein Tipp

Dies ist zu einem späteren Zeitpunkt praktisch, wenn Sie Ihre Bereitstellung automatisieren möchten und Ihr Skript ein Rollback ausführen muss.

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

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

öffentliche Funktion nach oben()

Schema::table('organizations', function ($table)
$table->integer('size')->after('name')->nullable();
);

In diesem Fall platziert Laravel Ihre neue Spalte direkt nach der Namensspalte, damit sie schön aussieht und viel besser organisiert ist.

Nützliche Tools für Linux-Spieler
Wenn Sie gerne unter Linux spielen, haben Sie wahrscheinlich Apps und Dienstprogramme wie Wine, Lutris und OBS Studio verwendet, um das Spielerlebnis ...
HD-Remastered-Spiele für Linux, die noch nie zuvor eine Linux-Version hatten
Viele Spieleentwickler und -herausgeber entwickeln HD-Remaster alter Spiele, um die Lebensdauer des Franchise zu verlängern. Bitte Fans, die Kompatibi...
So verwenden Sie AutoKey zur Automatisierung von Linux-Spielen
AutoKey ist ein Desktop-Automatisierungsdienstprogramm für Linux und X11, programmiert in Python 3, GTK und Qt. Mithilfe der Skript- und MACRO-Funktio...