マイグレーション(テーブルの新規作成)

メモ:  Category:blog

Laravel では、マイグレーションと呼ばれる機能を使ってデータベース上にテーブルを作成したり更新することができ、データベースに対する変更等を管理できます。

ここでは、マイグレーション機能を使ってテーブルを作成してみます。

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

Laravel でテーブルを定義するには、 まず Artisan コマンドを使ってテーブル名・項目などを定義するためのマイグレーションファイルを作成します。

$ php artisan make:migration [マイグレーションファイル名]

マイグレーションファイル名には、どのような名前を付けてもいいようですが Laravel で作成されたオープンソースプロジェクトなどを参考にすると、新規作成の場合は create_[テーブル名]_table とつけているようです。テーブル名は、複数形の名前を付けます。

しっかりと調べていませんが、 Illuminate\Database\Console\Migrations\TableGuesser を見るとテーブル名を推定しているような部分があります。

preg_match('/^create_(\w+)_table$/', $migration, $matches)

例えば、次のコマンドを実行すると database/migrations 配下に [日時]_create_users_table.php ファイルが作成されます。

$ php artisan make:migration create_users_table

生成されたマイグレーションファイルには、初期定義として次のように記述されています。

<?php
 
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
 
class CreateUsersTable extends Migration
{
    /**
    * Run the migrations.
    *
    * @return void
    */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }
 
    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

生成されたクラスには、 up() と down() の2つのメソッドが用意されています。 up() にはテーブルやカラム、インデックスの定義を記述し、 down() には up() メソッドが行った操作を元に戻す処理を記述します。

class CreatePostsTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
 
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

テーブルの定義が作成出来たら、次のコマンドを実行してデータベースへテーブルを作成します。

$ php artisan migrate

以上でデータベースにテーブルが作成されます。

bluenote by BBB