Laravel Migration Ändern, um eine Spalte null-Werte zulässt
Erstellte ich eine migration mit unsigned user_id
. Wie kann ich die Bearbeiten user_id
in einer neuen migration zu machen es auch nullable()
?
Schema::create('throttle', function(Blueprint $table)
{
$table->increments('id');
//this needs to also be nullable, how should the next migration be?
$table->integer('user_id')->unsigned();
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laravel 5 nun unterstützt die änderung Spalte..
Beispiel aus der offiziellen doc
Quelle: http://laravel.com/docs/5.0/schema#changing-columns
Laravel 4 bietet keine Unterstützung zur änderung von Spaltennamen. Sie schreiben roh-sql-Befehl.
DB::statement
- und raw-SQL... Aber vielleicht werde ich nachher versuchen... Thxchange
Methode nicht erkannt und funktionieren nicht.Ich Laravel installieren 5.7.Ich gehe davon aus, dass Sie versuchen, zu Bearbeiten eine Spalte, die Sie bereits Hinzugefügt haben, Daten auf, so fallen die Spalte und hinzufügen wieder als eine null-Spalte ist nicht möglich ohne Daten zu verlieren. Wir werden
alter
die vorhandene Spalte.Jedoch, Laravel schema builder unterstützt keine änderung andere Spalten als die Umbenennung der Spalte.
So müssen Sie zum ausführen von raw-Abfragen zu machen, wie diese:
Und um sicherzustellen, können Sie immer noch rollback der migration, wir erledigen den
down()
als gut.Einer Hinweis ist, dass, da Sie die Umwandlung zwischen null-Werte zulässt und keine null-Werte zulässt, müssen Sie sicherstellen, dass Sie bereinigen die Daten vor/nach der migration. So zu tun, dass in Ihrem Skript für die migration in beide Richtungen:
query
durchstatement
down
Funktion in der zweiten code-block wird die SQL-Anweisung sollte am Ende mitNOT NULL
. (Diedown
Funktion in dem Dritten Beispiel ist korrekt.)Hier ist die vollständige Antwort für die zukünftigen Leser. Beachten Sie, dass dies nur möglich ist in Laravel 5+.
Zunächst müssen Sie die doctrine/dbal Paket:
Nun in der migration Sie können dies tun, um die Spalte null-Werte zulässt:
Können Sie sich Fragen, wie Sie zum zurücksetzen dieser Vorgang. Leider ist diese syntax wird nicht unterstützt:
Dies ist der korrekte syntax zum wiederherstellen der migration:
Oder wenn Sie es bevorzugen, können Sie ein raw-Abfrage:
Hoffentlich finden Sie diese Antwort hilfreich. 🙂
nullable(false)
mich gerettet aus dem ziehen meine Haare, weil Sienullable()
ist nicht gut dokumentiert, und es gibt keinenotNull()
Funktion.SET FOREIGN_KEY_CHECKS = 0
gibt eine Fehlermeldung. Sie werden wahrscheinlich brauchen, um zu ändern, der die Tabelle der Einschränkungen durch die Verwendung einer raw query. siehe hier: postgresql.org/docs/current/static/sql-altertable.htmlEr sind, die vollständige migration für Laravel 5:
Der Punkt ist, können Sie Sie entfernen
nullable
durch die übergabefalse
als argument.Wenn Sie geschieht, ändern Sie die Spalten und stolperte auf
dann einfach installieren
composer require doctrine/dbal
Hinzufügen Dmitri Chebotarev Antwort, als für Laravel 5+.
Nach dass der doctrine/dbal Paket:
Können Sie dann eine migration mit nullable Spalten, etwa so:
Wiederherstellen der operation zu tun:
}
Hinzufügen Dmitri Chebotarev Antwort,
Wenn Sie ändern wollen, mehrere Spalten zu einer Zeit , können Sie es wie unten
Probieren Sie es aus:
->change
am Ende zu erwähnen, es Laravel 5+ nurFür Laravel 4.2, Unnawut die obige Antwort ist die beste. Aber wenn Sie mit dem Tabellen-Präfix, dann müssen Sie ändern Sie Ihren code ein wenig.
Und um sicherzustellen, können Sie immer noch rollback der migration, wir erledigen den
down()
als gut.