web-dev-qa-db-ja.com

laravel 5データを失わずに移行を使用してテーブルに列を追加する方法は?

既存のデータベーステーブルがあり、その上に列を追加したい。ただし、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を追加したい。

17
Eli

以下のコマンドを使用して、既存のテーブルを変更します

_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_を実行します

35
Abhishek

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
4
Jirennor