Laravel 5 unterstützt jetzt das Ändern einer Spalte. Hier ist ein Beispiel aus der offiziellen Dokumentation:
Schema::table('users', function($table)
{
$table->string('name', 50)->nullable()->change();
});
Quelle: http://laravel.com/docs/5.0/schema#changing-columns
Laravel 4 unterstützt das Ändern von Spalten nicht. Daher müssen Sie eine andere Technik verwenden, z. B. das Schreiben eines unformatierten SQL-Befehls. Beispielsweise:
// getting Laravel App Instance
$app = app();
// getting laravel main version
$laravelVer = explode('.',$app::VERSION);
switch ($laravelVer[0]) {
// Laravel 4
case('4'):
DB::statement('ALTER TABLE `pro_categories_langs` MODIFY `name` VARCHAR(100) NULL;');
break;
// Laravel 5, or Laravel 6
default:
Schema::table('pro_categories_langs', function(Blueprint $t) {
$t->string('name', 100)->nullable()->change();
});
}
->nullable(false)
können Sie die Spalte wieder ändern.Hier ist die vollständige Antwort für den zukünftigen Leser. Beachten Sie, dass dies nur in Laravel 5+ möglich ist.
Zunächst benötigen Sie das Doctrine / Dbal- Paket:
Jetzt in Ihrer Migration können Sie dies tun, um die Spalte nullbar zu machen:
Möglicherweise fragen Sie sich, wie Sie diesen Vorgang rückgängig machen können. Leider wird diese Syntax nicht unterstützt:
Dies ist die richtige Syntax, um die Migration zurückzusetzen:
Wenn Sie möchten, können Sie auch eine Rohabfrage schreiben:
Hoffentlich finden Sie diese Antwort hilfreich. :) :)
quelle
nullable(false)
hat mich davor bewahrt, mir die Haare auszureißen, weilnullable()
es nicht gut dokumentiert ist und es keinenotNull()
Funktion gibt.SET FOREIGN_KEY_CHECKS = 0
gibt einen Fehler. Wahrscheinlich müssen Sie die Einschränkungen der Tabelle mithilfe einer Rohabfrage ändern. siehe hier: postgresql.org/docs/current/static/sql-altertable.htmlIch gehe davon aus, dass Sie versuchen, eine Spalte zu bearbeiten, zu der Sie bereits Daten hinzugefügt haben. Daher ist es nicht möglich, eine Spalte zu löschen und erneut als nullfähige Spalte hinzuzufügen, ohne Daten zu verlieren. Wir werden
alter
die vorhandene Spalte.Der Schema-Builder von Laravel unterstützt jedoch keine anderen Änderungen als das Umbenennen der Spalte. Sie müssen also folgende Rohdatenabfragen ausführen:
Und um sicherzustellen, dass Sie Ihre Migration weiterhin rückgängig machen können, werden wir dies auch tun
down()
.Ein Hinweis ist, dass Sie, da Sie zwischen nullbar und nicht nullbar konvertieren, sicherstellen müssen, dass Sie die Daten vor / nach Ihrer Migration bereinigen. Tun Sie dies in Ihrem Migrationsskript in beide Richtungen:
quelle
query
durchstatement
down
Funktion im zweiten Codeblock sollte die SQL-Anweisung mit endenNOT NULL
. (Diedown
Funktion im dritten Beispiel ist korrekt.)Er ist die vollständige Migration für Laravel 5 :
Der Punkt ist, Sie können entfernen,
nullable
indem Siefalse
als Argument übergeben.quelle
Wenn Sie zufällig die Spalten wechseln und weiter stolpern
dann einfach installieren
composer require doctrine/dbal
quelle
Hinzufügen zu Dmitri Chebotarevs Antwort, wie für Laravel 5+.
Nach Anforderung des Doctrine / Dbal- Pakets:
Sie können dann eine Migration mit nullbaren Spalten durchführen, wie folgt:
Gehen Sie wie folgt vor, um den Vorgang zurückzusetzen:
quelle
Hinzufügen zu Dmitri Chebotarev Antwort,
Wenn Sie mehrere Spalten gleichzeitig ändern möchten, können Sie dies wie unten beschrieben tun
quelle
Versuch es:
quelle
->change
am Ende vergessen und nur Laravel 5+ zu erwähnencomposer require doctrine/dbal
Für Laravel 4.2 ist die obige Antwort von Unnawut die beste. Wenn Sie jedoch ein Tabellenpräfix verwenden, müssen Sie Ihren Code ein wenig ändern.
Und um sicherzustellen, dass Sie Ihre Migration weiterhin rückgängig machen können, werden wir dies auch tun
down()
.quelle