0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel sailでのmigrate簡易まとめ

Posted at

はじめに

Laravel sailでmigrateを行うケースについて簡単にまとめました。
sail環境以外でも、以下のコマンドのsailphpに読み替えてもらうと同様に動くと思います。

この記事は「Laravelの教科書 (加藤じゅんこ)」の内容を一部参考にさせていただきました。

新規テーブル作成時

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

マイグレーションファイルとモデルを同時に新規作成
$ sail artisan make:model <モデル名> -m

マイグレーションファイルのみ新規作成する場合はこちら
$ sail artisan make:migration マイグレーションファイル名

②作成したマイグレーションファイルを編集

database\migrations内に作成されたマイグレーションファイルを開いて編集する

  • upメソッドにはマイグレート実行時に行うことを、downメソッドにはマイグレートを取り消してロールバックする時に行うことを記述する
  • テーブル新規作成時はdownメソッドが自動入力されているので、通常はupメソッドを編集するだけで良い
  • カラムを追加する場合は$table->データ型('カラム名')->カラム修飾子の構文で記述する (データ型とカラム修飾子については後述)
サンプルコード (examplesテーブルを作成)
2024_08_11_194424_create_examples_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('examples', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

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

③マイグレート実行

$ sail artisan migrate

  • データベース内のmigrationsテーブルにマイグレートの実行記録が残る
  • maigrationsテーブルのbatchカラムには何回目にマイグレートが行われたかが表示されている
  • 後述するロールバックコマンドによって、batchごとにまとめてマイグレートを取り消すことができる

既存テーブル編集時

①テーブルに紐づいたマイグレーションファイルを作成

$ sail artisan make:migration <マイグレーションファイル名> --table=<編集するテーブル名>

②作成したマイグレーションファイルを編集

カラム追加時

  • upメソッドにカラムを追加する処理を、downメソッドにカラムを削除する処理を記述する
  • カラム削除にはdropColumnメソッドを使用する
サンプルコード (examplesテーブルにtest行を追加)
2024_08_11_195920_add_test_column.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::table('examples', function (Blueprint $table) {
            $table->string('test')->after('email');
        });
    }

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

カラム削除時

  • upメソッドにカラムを削除する処理を、downメソッドに削除をやり直す処理を記述する
サンプルコード (examplesテーブルからtest行を削除)
2024_08_11_200411_delete_test_column.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::table('examples', function (Blueprint $table) {
            $table->dropColumn('test');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('examples', function (Blueprint $table) {
            $table->string('test')->after('email');
        });
    }
};

カラム名変更時

  • renameColumnメソッドを使用する
  • このメソッドは第一引数のカラム名を第二引数の名称に変更する働きを持つ
サンプルコード (テストカラムの名称を変更する)
2024_08_11_201948_change_test_column_name.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::table('examples', function (Blueprint $table) {
            $table->renameColumn('test', 'try');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('examples', function (Blueprint $table) {
            $table->renameColumn('try', 'test');
        });
    }
};

カラムのデータ型変更時

  • changeメソッドを使用する
サンプルコード (テストカラムのデータ型を変更する)
2024_08_11_203551_change_test_column_type.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::table('examples', function (Blueprint $table) {
            $table->text('test')->change();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('examples', function (Blueprint $table) {
            $table->string('test')->change();
        });
    }
};

③マイグレート実行

$ sail artisan migrate

ロールバック

$ sail artisan migrate:rolllback

  • batchごとにまとめてマイグレートを取り消す
  • ロールバックによって消えたテーブルやカラムのデータも消えることに注意

マイグレーションファイルで使う主なデータ型

データ型 DB内表記 詳細
integer INTEGER 整数
string VARCHER 短めの文字列 (約255文字まで)
text TEXT 長めの文字列 (約16,384文字まで)
foreignId 外部キー
boolean BOOLEAN true/false
date DATE 日付
datetime DATETIME 日付・時刻

マイグレーションファイルで使う主なカラム修飾子

修飾子 詳細
nullable() NULL値を許容
after('カラム名') 指定したカラムの後に配置
default('値') 初期値を設定
unique() 重複値を認めない

おわりに

今後の学習で、役立ちそうなことを見つけた場合は記事を更新していく予定です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?