2016-05-03 3 views
16

既定値が既に割り当てられているテーブルがあります。たとえば、次のようになります。Laravelの移行で列の既定値が変更される

Schema::create('users', function (Blueprint $table) { 
      $table->increments('id')->unsigned(); 
      $table->integer('active')->default(1); 
     }); 

これで、アクティブなフィールドのデフォルト値を変更したいと考えています。

if (Schema::hasTable('users')) { 
     Schema::table('users', function (Blueprint $table) { 
      if (Schema::hasColumn('users', 'active')) { 
       $table->integer('active')->default(0); 
      } 
     }); 
    } 

をしかし、もちろん、それは列がすでに存在している私に語った:私はこのような何かを期待しています。列を削除せずに列xのデフォルト値を単純に更新するにはどうすればよいですか?

Schema::table('users', function ($table) { 
    $table->integer('active')->default(0)->change(); 
}); 

その後migrateのコマンドを実行します。

+0

もその以来、移行を実行よりあなたは手動でphpmyadmin(xampp)、workbenchなどのようなインターフェイスを使用してそれを行うことができますので、データを失うことはありません。 –

+0

今私がライブサーバー上で修正するために行ってきたことだが、私はまだ何が最善の方法を進んでいるのか知りたい。それ以外の場合は、laravel 5にアップグレードすることも考えていました。 –

+0

ここにあなたを助けるかもしれないリンクがあります - http://www.flipflops.org/2013/05/25/modify-an-existing-database-column-in-a -laravel-migration/ –

答えて

20

あなたはchange()メソッドを使用することができます。

更新

Laravel 4使用するためにこのような何か:up()方法の代わりに、Schema::table();句内

DB::statement('ALTER TABLE `users` CHANGE COLUMN `active` `active` INTEGER NOT NULL DEFAULT 0;'); 

+0

残念ですが、laravel 4.2を使用しています。 –

+0

Laravel 4では生のクエリを使用する必要があります。更新された質問を確認してください。 –

+0

ロールバックする方法は分かりますか? –

0

あなたは

if (Schema::hasTable('users')) { 
    Schema::table('users', function (Blueprint $table) { 
     if (Schema::hasColumn('users', 'active')) { 
      $table->integer('active')->default(0)->change(); 
     } 
    }); 
} 
+0

申し訳ありません追加しますが、私はlaravel 4.2を使用しています。 –

-2

はCLI

php artisan migration:refresh 

に以下のコードを実行することが

あなたのデータは失われますあなたのテーブルのスキーマを変更します列を更新するchange functionを呼び出す必要があります

1

あなたは別の移行を作成することができます -

php artisan migrate:make update_users 

新しい移行内側よりも、変更のためのあなたのALTERクエリを書く -

public function up() 
    { 
     DB::query("ALTER TABLE... "); 
     // the alter query here^


     )); 
    } 

と再び

php artisan migrate 
関連する問題