PR

【Laravel】php artisan make:migrate & php artisan maigrationサンプル

この記事は約10分で読めます。

php artisan make:migrationは、作成・変更するテーブルの列などを定義するクラスファイルを生成し、
php artian migrateは、マイグレーションファイルの定義に基づいてテーブルを作成・変更します。

広告

サンプル

広告

php artisan make:migrate

php artisan make:migration sample_table

上記コマンドを実行すると、

php artisan make'migration

作成先のファイルパスが出力され、ファイル名の始めに作成日(YYYY_MM_DD_HHmmss)が付け加えられた状態でマイグレーションファイルが生成されます。

生成されたファイル↓

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

upメソッドは、マイグレーションが適用される際に実行される処理で、
downメソッドは、マイグレーションが取り消される際に実行される処理です。

upメソッドにテーブルを作成するのか、テーブル構造を変更するのか、
処理を書いていくのですが、用途に合わせてオプションをつけたほうが楽ですので、
オプションにてサンプルを載せます。

オプション

–create

テーブル作成のためのマイグレーションファイル生成のオプションです。

php artisan make:migration create_sample_table --create=sample_table

–createの後に作成したいテーブル名を明記します。

コマンドを実行すると、/database/migrations/以下に
YYYY_MM_DD_HHmmss_create_sample_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('sample_table', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

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

このようにcreateオプションをつけると、
始めから、テーブル作成のためのロジックと、削除のためのロジックを書いた形で
マイグレーションファイルを生成してくれます。

あとは、カラムの部分を微調整するのみです。

微調整後↓

<?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('sample_table', function (Blueprint $table) {
            $table->id()->autoIncrement();
            $table->string('name', 100)->comment('名前');
            $table->integer('age')->comment('年齢')->nullable();
            $table->string('email', 255)->unique()->comment('メールアドレス')->nullable();
            $table->timestamps();
        });
    }

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

これでテーブルを作成するためのマイグレーションファイルが完成です。

–table

既存のテーブルを対象にしたマイグレーションファイルを生成するオプションです。

sample_tableのカラム、nameの長さを150に変更するサンプルを示します。

php artisan make:migration modify_name_on_sample_table --table=sample_table

コマンド実行後出力↓

php artisan make;migration --table

コマンドを実行すると、
/database/migrations/ 以下に
YYYY_MM_DD_HHmmss_modify_name_on_sample_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::table('sample_table', function (Blueprint $table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('sample_table', function (Blueprint $table) {
            //
        });
    }
};

このupメソッドに変更後を、downメソッドに変更前のカラムをセットします。

変更後↓

<?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('sample_table', function (Blueprint $table) {
            $table->string('name', 150)->comment('名前')->change();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('sample_table', function (Blueprint $table) {
            $table->string('name', 100)->comment('名前')->change();
        });
    }
};

これでテーブル構造を変更するマイグレーションファイルが完成です。

php artisan migration

php artisan migrate

上記を実行すると、マイグレーションファイルに定義しているようにデータベースを更新します。

今回は、sample_tableを作成するサンプルをお見せします。

sample_table作成のマイグレーションファイルを作成後、コマンドを実行すると、

php artisan migrate

上記のような出力がされ、/app/database/migrations/
にあるマイグレーションファイルすべてが実行されます。

実際に接続されているデータベースを見ると、

A5M2 sample_table

しっかりテーブルが作成され、

A5M2 sample_table column

構造もマイグレーションファイルに定義した通りとなっているのが分かります。

オプション

–seed

マイグレーション後にシード処理を再実行します。

seedを実行するための設定は、

をご覧ください。

seedを実行するための設定をした状態で、マイグレーションクラスとシーダークラスを準備し、

php artisan migration --seed

を実行すると、テーブル作成と初期データの投入を同時に行います。

コマンド実行後出力↓

php artisan migration --seed

実行シーダークラス↓

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class SampleSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        DB::table('sample_table')->insert([
            'name' => 'taro',
            'email' => 'sample@example.com',
            'age' => 30,
        ]);
    }
}

実行後テーブル↓

php artisan migration --seed A5M2
–seeder

実行するシーダークラスを指定します。
特定のシーダークラスのみを実行します。

php artisan migration --seed --seeder=SampleSeeder

上記を実行すると、SampleSeeder.classが実行され、
sample_tableにデータが投入されます。

コマンド実行後出力↓

–step

マイグレーションを個別に実行し、個別のロールバックを可能にします。

php artisan migration --step
広告
タイトルとURLをコピーしました