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

もくじ

以前はマイグレーションからテストデータ挿入までをまとめました。今回はマイグレーションファイルについて少し振り返ります。

bonoponz.hatenablog.com

全体像

まず、テーブル作成する場合を例として全体像を載せます。

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

class CreateFlightsTable extends Migration
{
    /**
     * マイグレーション実行
     *
     * @return void
     */
    public function up()
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('airline');
            $table->timestamps();
        });
    }

    /**
     * マイグレーションを元に戻す
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('flights');
    }
}

up()とdown()

up()マイグレーションを実行した際の処理

down()up()の処理を取り消す処理

テーブル

テーブル作成

Schema::create('flights', function (Blueprint $table)
{
  // カラム設定
}

新しいデータベーステーブルを作成するには、Schemaファサードcreateメソッドを使用します。createメソッドは引数を2つ取ります。最初はテーブルの名前で、2つ目は新しいテーブルを定義するために使用するBlueprintオブジェクトを受け取る「クロージャ」です。

この場合、もしすでにflightsというテーブルが存在している場合はエラーになります。

SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'flights' already exists

テーブルリネーム

既存のデータベーステーブルの名前を変えたい場合は、renameメソッドを使います。

Schema::rename($from, $to);

テーブル削除

存在するテーブルを削除する場合は、dropdropIfExistsメソッドを使います。down()メソッドで使用したりするかもしれませんね。

Schema::drop('users');

Schema::dropIfExists('users');

カラム

カラム作成

存在するテーブルを更新するには、Schemaファサードtableメソッドを使います。createメソッドと同様に、tableメソッドは2つの引数を取ります。第一引数に更新したいテーブルの名前を指定します。

Schema::table('users', function (Blueprint $table) {
    $table->string('email');
});

使用できるカラムタイプ

たくさんありますが抜粋します。

// 符号なしBIGINTを使用した自動増分ID(主キー)
$table->bigIncrements('id');

// 主キー名を任意に指定する(この場合user_id)
$table->bigIncrements('user_id');

// $table->bigIncrements('id')の省略版
$table->id();

// 符号なしINTを使用した自動増分ID(主キー)
$table->increments('id');    

// DATEカラム
$table->date('created_at');

// 数値型のINTEGERカラム
$table->integer('votes');

// 文字長を指定したVARCHARカラム
$table->string('name', 100);

カラム修飾子

上述のカラムタイプに修飾子を付与できます。

// カラムのデフォルト値設定
->default($value)

// (デフォルトで)NULL値をカラムに挿入する
->nullable($value = true)

// 整数カラムを自動増分ID(主キー)へ設定
->autoIncrement()

// 整数カラムを符号なしに設定(MySQLのみ)
->unsigned()

使用例

$table->integer('evaluation')->default(3);

evaluationというカラムに初期値として3を指定しています。

つまり、新規でレコードを作成したときに3が設定されます。

$flight = new Flight; // ここでdefault()の値が設定される

マイグレート

$ php artisan migrate
Migration table created successfully.

マイグレートをやり直す

$ php artisan migrate:reset
$ php artisan migrate
Migration table created successfully.

いったん全部のマイグレーションロールバックして、再度マイグレートすればOKです。

参考URL

データベース:マイグレーション 7.x Laravel