Laravelのマイグレーションを理解しよう


環境

PHP 7.3.24
Laravel 6.20.30
MAMP

migration(マイグレーション)とは?

マイグレーションとはDBのテーブルの履歴を管理するlaravelの機能です。
テーブルの追加や削除、カラムの追加や削除などをした際にその履歴が分かるような仕組みになっています。
php artisan migrateコマンドを実行することで、SQL文を書かなくてもDBの変更や作成等が可能です。

マイグレーションファイルの作成

php artisan make:migration マイグレーションファイル名
を実行することで、マイグレーションファイルを作成することができます。
マイグレーションファイルはdatabase /migrationsディレクトリの中に作られます。
migrationsディレクトリ内には、デフォルトでいくつかのマイグレーションファイルがすでに作成されています。

【補足】
マイグレーションの実行コマンドはphp artisan migrateですが、
マイグレーションファイルの作成コマンドはmake:migrateではなくmake:migration
となるので混同しないように注意!
(makeは動詞なので、そのあとに動詞であるmigrateがくるのは英文法的にもおかしいですよね)

テーブル追加のマイグレーションファイルを作成してみる

今回はtestsテーブルを作成していきます。
※テーブル名は複数形
ターミナルでLaravelプロジェクトに移動した後
php artisan make:migration create_tests_table
を実行します。

そしてdatabase/migrationsディレクトリの中に2021_07_17_103246_create_tests_table.phpが作成されているので中を確認します。

<?php

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

class CreateTestsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tests', function (Blueprint $table) {
            $table->bigIncrements('id'); 
            $table->timestamps(); 
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('tests');
    }
}

upメソッド

upメソッドはマイグレーションを実行する際に呼び出される関数です。
laravel初心者のため難しいところは一旦おいといて、重要の箇所のみまとめていきます!

 $table->bigIncrements('id'); 
 $table->timestamps(); 

// bigIncrements・・・莫大な数までを格納できる数値の型
// timestamps・・・自動でデータの作成日時(created_at)と更新日時(updated_at)を作成する型

upメソッド内のこの記述でidカラム、created_atカラム、updated_atカラムが作成されています。
これらのカラムはよく使うことが多いので、Laravelがデフォルトで作成してくれます。
他にも自分でカラムを追加したい場合はここに追記していきます。

downメソッド

downメソッドはマイグレーション実行後に「やっぱりマイグレーション前の状態に戻したいなあ…」となったときに使うメソッドです。(この処理をロールバックと言います)
そのため、マイグレーション実行時にはdownメソッドは使われることはありません。

今の段階では、まだ何もマイグレーションファイルをいじっていないので
・testsテーブルの作成
・デフォルトのカラムを追加(id, created_at, updated_at)
だけをしている状態です。

この場合のマイグレーションを戻す処理は
・testsテーブルの削除
のみになります。

なぜなら今回は「テーブルを作成」したので、ロールバックの処理としては「テーブルを削除」するからです。
テーブルを削除すればカラムも消えるのでわざわざカラムを削除する記述はいらないってことですね。

public function down()
    {
        Schema::dropIfExists('tests');
    }

マイグレーションの実行

マイグレーションファイルを作成しただけではDBには反映されません。
php artisan migrateというコマンドを実行して初めてDBに反映されます。

$ php artisan make:migration create_tests_table
Created Migration: 2021_07_17_151343_create_tests_table

参考

てくてくテック 【Laravel】migrationを理解しよう!