マイグレーションの変更方法

マイグレーションファイルを作成後、マイグレーションするとデータベースにデータベースの構造が反映されます。この構造を後から変更する場合にはマイグレーションファイルを追加し、マイグレーションする必要があります。ここでは、usersテーブルに新たなカラムを追加したいと思います。usersテーブルは以下のようになっています。

+-------------------+-----------------+------+-----+---------+----------------+
| Field             | Type            | Null | Key | Default | Extra          |
+-------------------+-----------------+------+-----+---------+----------------+
| id                | bigint unsigned | NO   | PRI | NULL    | auto_increment |
| name              | varchar(255)    | NO   |     | NULL    |                |
| email             | varchar(255)    | NO   | UNI | NULL    |                |
| email_verified_at | timestamp       | YES  |     | NULL    |                |
| password          | varchar(255)    | NO   |     | NULL    |                |
| remember_token    | varchar(100)    | YES  |     | NULL    |                |
| created_at        | timestamp       | YES  |     | NULL    |                |
| updated_at        | timestamp       | YES  |     | NULL    |                |
+-------------------+-----------------+------+-----+---------+----------------+

様々なフィールドがありますが、passwordの後に、管理者かどうかを確認するis_adminを追加する場合、以下のコマンドでマイグレーションファイルを作成し、追加の作業を行います。

php artisan make:migration add_is_admin_to_users_table --table=users

–table=テーブル名を追加することで、そのテーブルに関連付けられたマイグレーションファイルが作成されます。

マイグレーションファイルの規則名はカラムを追加する場合、

add_追加するカラム名_テーブル名(複数形)_table

となります。追加するカラムが複数になる場合は、

add_追加するカラム数+columns_テーブル名(複数形)_table

となります。属性を変更させる場合はaddをchangeに、削除する場合はaddをremoveにします。

生成されたマイグレーションファイルを以下のように編集します。

<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->boolean("is_admin")->after("password");
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn("is_admin");
        });
    }
};

次に以下のコマンドでマイグレーションを実行します。MySQLでデータベースの構造を確認し、以下のようになっていれば成功です。

+-------------------+-----------------+------+-----+---------+----------------+
| Field             | Type            | Null | Key | Default | Extra          |
+-------------------+-----------------+------+-----+---------+----------------+
| id                | bigint unsigned | NO   | PRI | NULL    | auto_increment |
| name              | varchar(255)    | NO   |     | NULL    |                |
| email             | varchar(255)    | NO   | UNI | NULL    |                |
| email_verified_at | timestamp       | YES  |     | NULL    |                |
| password          | varchar(255)    | NO   |     | NULL    |                |
| is_admin          | tinyint(1)      | NO   |     | NULL    |                |
| remember_token    | varchar(100)    | YES  |     | NULL    |                |
| created_at        | timestamp       | YES  |     | NULL    |                |
| updated_at        | timestamp       | YES  |     | NULL    |                |
+-------------------+-----------------+------+-----+---------+----------------+

以上、ここでは、マイグレーションファイルを後から変更する方法を紹介しました。これらのマイグレーションの変更は、変更対象のマイグレーションの後に行われる必要があるため、ファイルの名前順で変更用のマイグレーションファイルが後になるようにする必要があります。

コメントを残す

CAPTCHA