UnsplashのMark Tegethoffが撮影した写真
マイグレーションファイルを作成すると、デフォルトで2つのメソッドが作成されます。
それが、以下赤字のupメソッドとdownメソッドです。
この記事では、この2つのメソッドの役割についてまとめています。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title', 100);
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('posts');
}
};
■upメソッド
役割:upメソッドはmigration時の挙動を設定します。
以下のコマンドでマイグレーションを実行しますが、このときの挙動はupメソッドで設定します。
php artisan migration
■downメソッド
役割:downメソッドはrollback時の挙動を設定します。
laravelでは以下のようなマイグレーションをロールバックするコマンドがあります。
php artisan migration:rollback
ロールバック時の挙動はdownメソッドで設定します。
このため、downメソッドにはupメソッドに記述する内容の逆のことを記述します。
例)upメソッドに「カラムAを作成」する記述をした
⇒ downメソッドに「カラムAを削除」する記述をする
downメソッドはrollback時に実行されるので、基本的にupメソッドに記述した内容を巻き戻すような内容を記述します。
以下表の対応のように、もしupメソッドでテーブルを作成するなら、downメソッドでそのテーブルを削除する記述をします。
upメソッドに記述した内容 | downメソッドに記述する内容 |
テーブルを作成 | テーブルを削除 |
カラムを追加 | カラムを削除 |
カラムを編集 | カラムの編集を元に戻す |
例)
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->integer('status'); //カラムを追加
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('status'); // カラムを削除
});
}
};
テーブル作成用にマイグレーションファイルをコマンド実行で作成した場合、downメソッドには対象テーブルを削除するコードがデフォルトで記述されています。
例)
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title', 100);
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('posts'); // テーブルを削除するコード
}
しかし、その他(カラム追加、カラム編集時など)は自分でdownメソッドを記述する必要があります。
upメソッドとdownメソッドについては以上です。