既存の移行を変更しようとしています。つまり、現在の移行クラスは次のとおりです。
_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
_を再度実行すると、次のように表示されます。
移行するものはありません。
とにかく、移行の新しいバージョンをどのように適用できますか?
次のコマンドを使用して新しい移行を作成する必要があります。
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
移行による列の変更 の詳細を参照してください
アプリが運用環境になく、データをシードする場合、実行できる最善の方法は次のとおりです。
php artisan migrate:refresh --seed
このコマンドは、すべてのテーブルを削除して再作成します。次に、データをシードします。
開発中に変更ごとに追加の移行を作成すると、数百の移行クラスが作成されます。
change
メソッドを使用できます。これにより、いくつかの既存の列タイプを新しいタイプに変更したり、列の属性を変更したりできます。
たとえば、列をNULL可能に変更します。
Schema::table('log_for_user', function ($table) {
$table->string('error_message')->nullable()->change();
});
ただし、まずはdoctrine/dbal
パッケージが必要です
composer require doctrine/dba
これを行うには2つの方法があります。
php artisan migrate:refresh
_を実行します。これにより、すべての移行がロールバックされ、すべての移行が移行されます。このコマンドを実行すると、データベースに挿入されたすべてのデータが失われます。_php artisan make:migration enter_your_migration_name_here
_を実行します。次に、これを移行に挿入します。
$table->string('error_message')->nullable()->change();
次に、_php artisan migrate
_を実行して、テーブルを変更します。 (これを行うと、コンポーザーに_composer require doctrine/dbal
_が必要になることに注意してください)