マイグレーション

記事の内容

概要

マイグレーションは、データベーステーブルの作成・変更・削除を行うスクリプトです。

ファイル作成

【実行内容】

php artisan make:migration create_テーブル名_table

テーブル名は複数形

【ファイル先】database/migrations/xxxx_xx_xx_xxxxxx_create_テーブル名_table.php

<?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::create('テーブル名', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('テーブル名');
    }
};

定義

追加したいカラムがあれば情報を修正します。

<?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::create('テーブル名', function (Blueprint $table) {
            $table->id();
            $table->string('追加カラム名');
            $table->string('追加カラム名')->unique();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('テーブル名');
    }
};

テーブル追加

以下の命令を実行するとDBにテーブルが作成される。

【実行内容】

php artisan migrate

一覧

カラム追加

作成されたファイルを編集しましょう。

マイグレーション(カラム追加)
記法

php artisan make:migration add_カラム名_to_テーブル名_table –table=テーブル名

【作成ファイル】

<?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('テーブル名', function (Blueprint $table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('テーブル名', function (Blueprint $table) {
            //
        });
    }
};

【修正】

<?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('テーブル名', function (Blueprint $table) {
            $table->string('カラム名')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('テーブル名', function (Blueprint $table) {
            $table->dropColumn('カラム名');
        });
    }
};

カラムリネーム

作成されたファイルを編集しましょう。

マイグレーション(カラムリネーム)
記法

php artisan make:migration rename_カラム名_in_テーブル名_table –table=テーブル名

【作成ファイル】

<?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('テーブル名', function (Blueprint $table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('テーブル名', function (Blueprint $table) {
            //
        });
    }
};

【修正】

<?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('テーブル名', function (Blueprint $table) {
            $table->renameColumn('旧カラム名', '新カラム名');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('テーブル名', function (Blueprint $table) {
            $table->renameColumn('新カラム名', '旧カラム名');
        });
    }
};

カラム削除

作成されたファイルを編集しましょう。

マイグレーション(カラム削除)
記法

php artisan make:migration drop_カラム名_from_テーブル名_table –table=テーブル名

【作成ファイル】

<?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('テーブル名', function (Blueprint $table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('テーブル名', function (Blueprint $table) {
            //
        });
    }
};

【修正】

<?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('テーブル名', function (Blueprint $table) {
            $table->dropColumn('カラム名');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('テーブル名', function (Blueprint $table) {
            $table->string('カラム名');
        });
    }
};

テーブル名変更

作成されたファイルを編集しましょう。

マイグレーション(テーブル名変更)
記法

php artisan make:migration rename_旧テーブル名_table_to_新テーブル名_table

【作成ファイル】

<?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('新テーブル名', function (Blueprint $table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('新テーブル名', function (Blueprint $table) {
            //
        });
    }
};

【修正】

<?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::rename('旧テーブル名', '新テーブル名');
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::rename('新テーブル名', '旧テーブル名');
    }
};

テーブル削除

作成されたファイルを編集しましょう。

マイグレーション(テーブル削除)
記法

php artisan make:migration drop_テーブル名_table

【作成ファイル】

<?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
    {
        //
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        //
    }
};

【修正】

<?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::dropIfExists('テーブル名');
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::create('テーブル名', function (Blueprint $table) {
            // ========================================
            // テーブルを元に戻すために必要な情報 (記述は一例)
            $table->id();            
            $table->string('カラム名');
            $table->string('カラム名')->unique();
            $table->timestamps();
            // ========================================
        });
    }
};

インデックス追加

作成されたファイルを編集しましょう。

マイグレーション(インデックス追加)
記法

php artisan make:migration add_indexes_to_テーブル名_table –table=テーブル名

【作成ファイル】

<?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('テーブル名', function (Blueprint $table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('テーブル名', function (Blueprint $table) {
            //
        });
    }
};

【修正】

<?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('テーブル名', function (Blueprint $table) {
            // インデックスの追加
            $table->index('カラム名');
            // 一意インデックスの追加
            $table->unique('カラム名');
            // 複合インデックスの追加
            $table->index(['カラム名', 'カラム名']);
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('テーブル名', function (Blueprint $table) {
            // インデックスの削除
            $table->dropIndex(['カラム名']);
            // 一意インデックスの削除
            $table->dropUnique(['カラム名']);
            // 複合インデックスの削除
            $table->dropIndex(['カラム名', 'カラム名']);
        });
    }
};
記事の内容
閉じる