web-dev-qa-db-ja.com

Laravel移行-列の削除

データベーステーブルUserDomainNameから列clientsを削除する必要があります。

documentation で説明されているように、最初に_doctrine/dbal_を実行して_composer require doctrine/dbal_を実行して_composer update_をインストールしました。

次に、列を削除するために使用する移行を作成しました。

_php artisan make:migration remove_user_domain_name_from_clients --table=clients
_

Schema::dropColumn('UserDomainName');メソッドにdown()を追加しました:

_<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class RemoveDomainName extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('clients', function (Blueprint $table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('clients', function (Blueprint $table) {
            Schema::dropColumn('UserDomainName');
        });
    }
}
_

しかし、私は得る

_Migrating: 2017_08_22_135145_remove_user_domain_name_from_clients
Migrated:  2017_08_22_135145_remove_user_domain_name_from_clients
_

_php artisan migrate_を実行した後、列は削除されません。もう一度実行すると、_Nothing to migrate._が返されます

6
Black

down関数はロールバックに使用されます。このdropColumnは、マイグレーションの実行時に実行するアクションであるため、up関数に追加する必要があります。

したがって、up関数には次のようになります。

Schema::table('clients', function (Blueprint $table) {
    $table->dropColumn('UserDomainName');
});

そしてdown関数で逆を行い、列を追加します:

Schema::table('clients', function (Blueprint $table) {
    $table->string('UserDomainName');
});

このようにして、いつでも移行の任意の時点に戻ることができます。

19
Jerodev