マイグレーション実行手順・方法

Tag:

マイグレーションの生成、テーブル構造の指定、マイグレーションの実行について取り上げます。

マイグレーションの生成

新規にテーブル作成したい場合

「tests」というテーブルを作成する場合、下記のようにartisanコマンドを実行

php artisan make:migration create_tests_table --create=tests

既存テーブルの構造変更したい場合

「tests」というテーブルの構造を変更したい場合、下記のようにartisanコマンドを実行

php artisan make:migration add_clum_tests_table --table=tests

テーブル構造の指定

ここでは、下記コマンド実行後に生成されたマイグレーションファイルを編集していきます。

php artisan make:migration create_tests_table --create=tests

マイグレーションファイルには、以下のように記述しました。

<?php

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

class CreateTestsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tests', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('integer')->comment('数値');
            $table->bigInteger('big_integer')->default(0);
            $table->unsignedInteger('unsigned_integer');
            $table->float('float', 8, 2);
            $table->double('double', 15, 8);
            $table->date('date');
            $table->dateTime('dateTime');
            $table->timestamp('timestamp');
            $table->string('string')->nullable();
            $table->string('string100', 100);
            $table->text('text');
            $table->timestamps();
            $table->unique('integer');
            $table->index(['string', 'string100']);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('tests');
    }
}

マイグレーションの実行

下記コマンドでマイグレーションを実行します。

php artisan migrate

今回作成されたテーブル構造は以下の通りです。DBはMySQLです。
laravel_migration

laravel_migration2

外部キー制約

外部キー制約も定義できます。

「testsテーブルのuser_id」を外部キーとして、「usersテーブルのid」を参照するようにしてみます。

Schema::create('users', function (Blueprint $table) { 
    $table->increments('id'); 
               :
});

Schema::create('tests', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->unsignedInteger('user_id'); 
    $table->foreign('user_id') 
        ->references('id') 
        ->on('users') 
        ->onDelete('cascade');  // 参照先が削除されたら同時に削除
});
※注意点
・先に参照先のテーブルを作成します。
・参照元のカラムと参照先のカラムの型が一致する必要があります。
 incrementsスキーマビルダーは符号なしINT型を生成します。
 そのため、参照元カラムのスキーマビルダーとしてunsignedIntegerを利用しています。
・削除時(drop)は、先に参照元テーブルを削除します。

補足

カラム修飾子

テーブル構造の指定で、カラム修飾子として「comment」「default」「nullable」を使ってますが、他に「after」も使うことが多いです。

->after('カラム')

指定したカラムの後にカラムを設置します。

モデル(Eloquent model)クラスを生成

テーブル作成後にEloquentクラスを作成するかと思います。

php artisan make:model Test

マイグレーションのやり直し

最後のマイグレーションをやり直すには下記コマンドを実行します。

php artisan migrate:rollback

スポンサーリンク