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.

SuperTuxKart für Linux
SuperTuxKart ist ein großartiger Titel, der entwickelt wurde, um Ihnen das Mario Kart-Erlebnis kostenlos auf Ihrem Linux-System zu bieten. Es ist ziem...
Battle for Wesnoth-Tutorial
The Battle for Wesnoth ist eines der beliebtesten Open-Source-Strategiespiele, die Sie derzeit spielen können. Dieses Spiel befindet sich nicht nur se...
0 A.D. Lernprogramm
Von den vielen Strategiespielen da draußen, 0 A.D. schafft es, sich trotz Open Source als umfassender Titel und sehr tiefgehendes, taktisches Spiel ab...