既存のデータベーステーブルがあり、その上に列を追加したい。ただし、php artisan migrate
コマンドを実行すると、移行するものはありません。しかし、テーブル列を追加するためのスキーマをすでに追加しています。新しい列を追加する前に最初にphp artisan migrate:refresh
を実行する必要があるいくつかの記事とリンクを読みました。問題は、テーブルの既存のデータが消去されることです。データを削除せずに移行を実行し、テーブルに列を正常に追加する方法はありますか?これで私を助けてください。どうもありがとう。これが私の移行コードです。
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');
}
shipped_via
テーブルに列purchase_orders
およびterms
を追加したい。
以下のコマンドを使用して、既存のテーブルを変更します
_php artisan make:migration add_shipped_via_and_terms_colums_to_purchase_orders_table --table=purchase_orders
_
新しいテーブルの作成には_--create
_を使用し、既存のテーブルの変更には_--table
_を使用します。
これで、新しい移行ファイルが作成されます。このファイルのup()
関数内に次の行を追加します
_Schema::table('purchase_orders', function(Blueprint $table){
$table->string('shipped_via');
$table->string('terms');
});
_
そして_php artisan migrate
_を実行します
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()
{
//
}
現在のpurchase_ordersの移行によってテーブルが削除される場合は、down関数を設定する必要はありません。
新しい移行を移行するには、次を実行します。
php artisan migrate