2016-07-13 7 views
11

移行では、enabledフィールドをデフォルト値の1に変更します。 down()方法でマイグレーションでデフォルトを削除しますか?

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

- どのように私はdefault()を削除するには?私はdefault(0)を行うことができますが、デフォルトは作成テーブル中に作成されていないことを知っています。

+0

何も表示されない場合は、 'down()'メソッドでRawクエリを書くことを検討してください。 –

+0

'$ table-> boolean( 'enabled') - > change();'を試してみてください! –

答えて

3

Laravel関数を使用してこのステートメントを削除する方法はないため、down関数はそのステートメントをそのままrawとして実行する必要があります。それはのようなものでなければなりません:->default(NULL)はテーブルからデフォルト値を削除し、驚くべきことか

use Illuminate\Support\Facades\DB; 
+0

classnameはすでに "DB"自体であるので、 "DB"エイリアスなしであれば十分です。 – srph

+0

@srphそうです。編集されました。ありがとうございました。 –

13

:この移行を実行するために

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

を、あなたはあなたの移行の上部にincluideする必要があります。

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

だけlaraveldiffの間を行っているため、動作しませんdefaultコールを省略210およびcurrent state + specified changes。変更は指定されておらず、差分もありません。

その後、doctrineALTER TABLE statement(特に結果の列宣言)を生成し、NULL valueをデフォルト値not being specifiedとして処理します。

+0

サイドノート:Laravelの移行では、一部の列型の変更がサポートされていません。私は 'tinyInteger'カラムを変更しようとしましたが、うまくいきませんでした。詳細はhttps://laravel.com/docs/5.4/migrations#modifying-columnsをご覧ください。 –

+0

' - > default(null)'がデフォルト値として 'NULL'を設定し、' - > noDefault() 'がデフォルト値を削除すると直感的になります(' - > default(false) 'と考えました) Postgresではデフォルトで 'false'を設定します)。 – Wirone

関連する問題