2024.05.21
【Laravel】マイグレーションファイルのupメソッドとdownメソッドの役割

UnsplashMark Tegethoffが撮影した写真

upメソッド、downメソッドとは

マイグレーションファイルを作成すると、デフォルトで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メソッドに記述する内容

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メソッドはデフォルトで記述されている

テーブル作成用にマイグレーションファイルをコマンド実行で作成した場合、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メソッドについては以上です。