【Laravel】マイグレーションファイルの作成
もくじ
以前はマイグレーションからテストデータ挿入までをまとめました。今回はマイグレーションファイルについて少し振り返ります。
全体像
まず、テーブル作成する場合を例として全体像を載せます。
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);
テーブル削除
存在するテーブルを削除する場合は、drop
かdropIfExists
メソッドを使います。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です。