2016-04-19 2 views
15

私は既存のデータベーステーブルを持っていて、それにカラムを追加したいと思います。しかし、php artisan migrateコマンドを実行すると、移行するものは何も表示されません。しかし、私は既にテーブルの列を追加するためのスキーマを追加します。私はいくつかの記事とリンクを追加する新しい列の前に最初にphp artisan migrate:refreshを実行する必要があります。問題は、私のテーブル内の私の既存のデータを消去します。移行を実行してデータを削除せずにテーブルに列を追加する方法はありますか?これで私を助けてください。どうもありがとう。ここに私の移行コードがあります。データを失うことなく、laravel 5の移行を使用してテーブルに列を追加する方法は?

public function up() 
{ 
    // 
    Schema::create('purchase_orders', function(Blueprint $table){ 

     $table->increments('id'); 
     $table->string('po_code'); 
     $table->text('purchase_orders'); 
     $table->float('freight_charge'); 
     $table->float('overall_total'); 
     $table->timestamps(); 

    }); 

    Schema::table('purchase_orders', function(Blueprint $table){ 
     $table->string('shipped_via'); 
     $table->string('terms'); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    // 
    Schema::drop('purchase_orders'); 
} 

私は私のpurchase_ordersテーブルの列shipped_viatermsを追加したいです。

答えて

28

を使用し:ちょうど実行し、新たな移行を移行するには

新しい移行ファイルが作成されます。このファイルのup()関数内でこれらのライン

Schema::table('purchase_orders', function(Blueprint $table){ 
    $table->string('shipped_via'); 
    $table->string('terms'); 
}); 

を追加しphp artisan migrate

3

Laravelには、データベース内に既に実行されているすべての移行を追跡するテーブルがあります。したがって、移行ファイルを変更するだけで、Laravelは移行を自動的に再実行しません。 Laravelによって既に移行が実行されているためです。

これを行うには、新しい移行を作成して既に作成したコードを挿入するだけです。

public function up() 
{ 
    // 
    Schema::table('purchase_orders', function(Blueprint $table){ 
     $table->string('shipped_via'); 
     $table->string('terms'); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    // 

} 

down_function関数の場合は、現在のpurchase_ordersの移行によってテーブルが削除されることはありません。既存のテーブルに既存のテーブルを変更するための新しいテーブルと--tableを作成するための

php artisan make:migration add_shipped_via_and_terms_colums_to_purchase_orders_table --table=purchase_orders 

使用--createを変更するためのコマンド以下

php artisan migrate 
+1

が本当に空の 'ダウン()'ビットを理解していない実行します。 'down()'を逆にして 'up()'と 'down()'の両方を使うのがベストプラクティスではありませんか?この場合、 '$ table-> dropColumn( 'shipped_via');と' $ table-> dropColumn( 'terms'); ' – kiradotee

+0

ああ、OPのメッセージを読んで、新しいテーブルを作成しています。 – kiradotee

関連する問題