2016-07-13 46 views
11

Nella migrazione, modifico il campo enabled per impostare il valore 1 come predefinito.remove Default in migration?

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

In down() metodo - Come si rimuove default()? So che so fare default(0) ma il default non è mai stato creato durante la creazione della tabella.

+0

Se non viene in su, provare a considerare la scrittura di una query Raw nel metodo 'verso il basso()'. –

+0

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

risposta

3

Poiché non v'è alcun modo per rimuovere questa dichiarazione con le funzioni laravel, la funzione verso il basso deve eseguire l'istruzione come prima. Dovrebbe essere qualcosa di simile:

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

Per eseguire questa migrazione, è necessario incluide nella parte superiore della migrazione:

use Illuminate\Support\Facades\DB; 
+0

Poiché il nome della classe è già "DB", dovrebbe essere sufficiente senza l'alias "DB". – srph

+0

@ srph Hai ragione. Modificato. Grazie. –

13

Sorprendentemente o meno, ->default(NULL) rimuove il valore di default da una tabella:

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

Basta omettere default chiamata non funziona, dal momento che laravel fa un diff tra current state e current state + specified changes. Nessuna modifica specificata, nessuna diff.

Dopo di che, doctrine genera ALTER TABLE statement (in particolare, dichiarazione colonna risultante), trattando NULL value come valore predefinito not being specified.

+0

Una nota a margine: le migrazioni di Laravel non supportano le modifiche ad alcuni tipi di colonna. Ho appena provato a cambiare una colonna 'tinyInteger' e non ha funzionato. Vedi https://laravel.com/docs/5.4/migrations#modifying-columns per i dettagli. –

+0

sarebbe più intuitivo se '-> default (null)' sarebbe impostare 'null' come valore di default e' -> NODEFAULT() 'eliminerebbe valore di default (ho pensato a' -> default (false) ', ma dovrebbe imposta 'false' come predefinito in Postgres ...). – Wirone