web-dev-qa-db-ja.com

Laravelで移行を変更するにはどうすればよいですか?

既存の移行を変更しようとしています。つまり、現在の移行クラスは次のとおりです。

_class CreateLogForUserTable extends Migration
{
    public function up()
    {
        Schema::create('log_for_user', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id');
            $table->string('table_name');
            $table->string('error_message');
            $table->unsignedTinyInteger('error_code');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('log_for_user');
    }
}
_

この_php artisan migrate_コマンドも1回実行しました。ここで、->nullable()メソッドを_error_message_列に追加する必要があります。そこで、次のような移行を編集しました。

_.
.
    $table->string('error_message')->nullable();
.
.
_

しかし、_php artisan migrate_を再度実行すると、次のように表示されます。

移行するものはありません。

とにかく、移行の新しいバージョンをどのように適用できますか?

14
stack

次のコマンドを使用して新しい移行を作成する必要があります。

php artisan make:migration update_error_message_in_log_for_user_table

次に、作成された移行クラスで、次のようなchangeメソッドを使用してこの行を追加します。

class UpdateLogForUserTable extends Migration
{
    public function up()
    {
        Schema::table('log_for_user', function (Blueprint $table) {
            $table->string('error_message')->nullable()->change();
        });
    }

    public function down()
    {
        Schema::table('log_for_user', function (Blueprint $table) {
            $table->string('error_message')->change();
        });
    }
}

これらの変更を行って移行を実行するには、次のコマンドを使用します。

php artisan migrate

変更をロールバックするには、次のコマンドを使用します。

php artisan migrate:rollback

Rollbackコマンドにstepオプションを指定すると、限られた数の移行をロールバックできます。たとえば、次のコマンドは最後の5つの移行をロールバックします。

php artisan migrate:rollback --step=5

移行による列の変更 の詳細を参照してください

20
Saumya Rastogi

アプリが運用環境になく、データをシードする場合、実行できる最善の方法は次のとおりです。

php artisan migrate:refresh --seed

このコマンドは、すべてのテーブルを削除して再作成します。次に、データをシードします。

開発中に変更ごとに追加の移行を作成すると、数百の移行クラスが作成されます。

7
Alexey Mezenin

change メソッドを使用できます。これにより、いくつかの既存の列タイプを新しいタイプに変更したり、列の属性を変更したりできます。

たとえば、列をNULL可能に変更します。

Schema::table('log_for_user', function ($table) {
    $table->string('error_message')->nullable()->change();
});

ただし、まずはdoctrine/dbalパッケージが必要です

composer require doctrine/dba
2
Amit Gupta

これを行うには2つの方法があります。

  1. _php artisan migrate:refresh_を実行します。これにより、すべての移行がロールバックされ、すべての移行が移行されます。このコマンドを実行すると、データベースに挿入されたすべてのデータが失われます。
  2. _php artisan make:migration enter_your_migration_name_here_を実行します。次に、これを移行に挿入します。

    $table->string('error_message')->nullable()->change();

    次に、_php artisan migrate_を実行して、テーブルを変更します。 (これを行うと、コンポーザーに_composer require doctrine/dbal_が必要になることに注意してください)

2
aceraven777