2016-07-13 6 views
11

In der Migration ändere ich enabled Feld auf 1 Wert als Standard festlegen.entfernen Standard in der Migration?

public function up() 
{ 
    Schema::table('client', function (Blueprint $table) { 
     $table->boolean('enabled')->default(1)->change(); 
    }); 
} 

In down() Methode - Wie entferne ich default()? Ich weiß, kann default(0) tun, aber Standard wurde nie während create table erstellt.

+0

Wenn nichts auftaucht, versuchen Sie eine Raw Query in Ihre 'down()' Methode zu schreiben. –

+0

Versuchen Sie '$ table-> boolean ('enabled') -> change();'! –

Antwort

3

Da es keine Möglichkeit gibt, diese Anweisung mit Laravel-Funktionen zu entfernen, muss Ihre Down-Funktion die Anweisung als Raw ausführen. Es sollte so etwas sein:

public function down() 
    { 
    Schema::table('client', function ($table) { 
     DB::statement('ALTER TABLE' . $table . 'ALTER COLUMN enabled DROP DEFAULT'); 
    }); 
    } 

Um diese Migration durchzuführen, müssen Sie an der Spitze der Migration umfabt:

use Illuminate\Support\Facades\DB; 
+0

Da der Klassenname bereits "DB" ist, sollte er ohne den Alias ​​"DB" genügen. – srph

+0

@srph Sie haben Recht. Bearbeitet. Vielen Dank. –

13

überraschend oder nicht, ->default(NULL) Standardwert aus einer Tabelle entfernt:

public function up() 
{ 
    Schema::table('client', function (Blueprint $table) { 
     $table->boolean('enabled')->default(NULL)->change(); 
    }); 
} 

Gerade Weglassen default Aufruf funktioniert nicht, da laravel eine diff zwischenmacht 210 und current state + specified changes. Keine Änderungen angegeben, kein Unterschied.

Danach doctrine generiert ALTER TABLE statement (insbesondere resultierende Spalte Deklaration), Behandlung NULL value als Standardwert not being specified.

+0

Eine Randnotiz: Laravel-Migrationen unterstützen keine Änderungen an bestimmten Spaltentypen. Ich habe gerade versucht, eine 'tinyInteger'-Spalte zu ändern und es hat nicht funktioniert. Weitere Informationen finden Sie unter https://laravel.com/docs/5.4/migrations#modifying-columns. –

+0

Es wäre intuitiver, wenn '-> default (null)' würde 'NULL' als Standardwert und' -> noDefault() 'würde den Standardwert (ich dachte über' -> default (false) '' aber es sollte Setze 'false' als Standard in Postgres ...). – Wirone

Verwandte Themen