Spalte in einer Laravel-Migration nicht nullfähig machen

Lesezeit: 3 Minuten

Ich schreibe eine Migration, um bestimmte Spalten in einer Tabelle zu erstellen nullable im Augenblick. Für die Down-Funktion möchte ich natürlich diese Spalten machen not nullable wieder. Ich habe durch die geschaut Schema-Builder-Dokumentationkonnte aber keine Möglichkeit sehen, dies zu tun.

Jede Hilfe wäre willkommen.

  • Die umfassendste Antwort auf diese Frage finden Sie hier: stackoverflow.com/a/32568625/4908847

    – szaman

    7. Juni 2017 um 8:05 Uhr

Benutzer-Avatar
TLGreg

Vor Laravel 5 gab es keine Laravel-native Möglichkeit, eine vorhandene Tabellenspalte mit dem Schema-Builder zu ändern. Sie müssten dafür Rohabfragen verwenden.

Ab Laravel 5 können Sie jedoch verwenden:

$table->string('foo')->nullable(false)->change();

Sie müssen die DBAL-Abhängigkeit haben, bevor Sie den obigen Befehl ausführen:

composer require doctrine/dbal

  • Das habe ich auch gefunden. Eine nette Geste wäre, wenn der Schema-Builder das Ändern von Spaltendefinitionen ermöglichen würde, was er anscheinend nicht unterstützt. Ich bin mir sicher, dass es viele andere wie mich gibt, die den Schema Builder verwenden, um eine vorhandene Datenbank zu ändern, und nicht nur Tabellen von Grund auf neu erstellen.

    – Sean die Bohne

    25. Januar 2013 um 19:29 Uhr

  • Taylor Otwell (Schöpfer von Laravel) sagte vor 6 Tagen (09.05.2014): “Ich stehe immer noch zu meiner Aussage, dass ich es zusammenführen werde, wenn es jemand erfolgreich und sauber machen kann.” github.com/laravel/framework/issues/895#issuecomment-42709756

    – Ryan

    15. Mai 2014 um 21:30 Uhr

  • @Musa Anscheinend können Sie eine Spalte nullable setzen (z. B.: $table->string('colmn', 255)->nullable()->change();), aber die Umkehrung scheint nicht zu funktionieren ($table->string('colmn', 255)->change();), also müssen Sie dafür immer noch unformatierte DB-Abfragen verwenden

    – Luis Cruz

    21. Mai 2015 um 13:41 Uhr

  • Siehe die Antwort von @ MattMcDonald unten. Sie können nullable() verwenden, um es nullable und nullable(false) zu machen, um es in einer Migration nicht nullable zu machen.

    – ajon

    11. Januar 2016 um 21:41 Uhr

  • nullable(false) funktioniert bei mir in Laravel 5.3 nicht 🙁

    – Stalinko

    24. März 2017 um 15:51 Uhr


Benutzer-Avatar
Matt McDonald

Ab Laravel 5 ist es möglich, dies umzukehren, indem man false als Argument an übergibt nullable.

$table->string('foo')->nullable(false)->change();

  • Es klappt! Aufgrund von Updates für Laravel ist dies also die richtige Antwort geworden.

    – jlbang

    26. Januar 2016 um 21:53 Uhr

  • Danke, obwohl ich nicht verstehe, warum Spalten nicht standardmäßig nicht nullfähig sind. Dies ist normalerweise eine bewährte Methode, und dies fügt dem Code viel Rauschen hinzu.

    – Morgan

    27. Juli 2018 um 17:37 Uhr

  • Spalten sind standardmäßig nicht null. Das Poster fragte nur, wie man eine bereits leere Spalte umkehrt.

    – Matt McDonald

    28. Juli 2018 um 19:23 Uhr

  • Zuerst erforderlich composer require doctrine/dbal

    – Eduardo Cuomo

    2. Oktober 2020 um 19:47 Uhr

Benutzer-Avatar
Funerr

Führen Sie zuerst Folgendes aus:

composer require doctrine/dbal

Erstellen Sie dann eine Migration, die die Tabelle wie folgt ändert:

php artisan make:migration fix_whatever_table_name_here

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->type('column')->nullable(false)->change();
    });
}

# Optional:
# public function down()
# {
#     Schema::table('table_name', function ($table) {
#         $table->type('column')->nullable()->change();
#     });
# }

  • Gibt es einen Grund, die gesamte Spalte in der Rollback-Routine zu löschen? Die down()-Methode sollte nur die Logik der up()-Methode rückgängig machen, um fortlaufende Migrationen rückwärts und vorwärts zu unterstützen.

    – Andreas

    10. Juli 2019 um 8:37 Uhr

Benutzer-Avatar
Gabriel Fernández

Sie können die Spalte einfach ohne ->nullable() erneut deklarieren und ->change verwenden

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->type('column')->nullable(false)->change();
    });
}

public function down()
{
    Schema::table('table_name', function ($table) {
        $table->type('column')->nullable()->change();
    });
}

In Laravel 8 müssen Sie nur Folgendes eingeben: “->nullable()”

$table->string('name')->nullable(); 

1361240cookie-checkSpalte in einer Laravel-Migration nicht nullfähig machen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy