マイグレーションでテーブルを作る
Laravelは、テーブル定義を元に自動でテーブルを作成(CREATE TABLE)するマイグレーションという機能を提供しています。
例えば、次のようなテーブルをマイグレーション機能を使って自動生成してみましょう。
CREATE TABLE members (
id serial PRIMARY KEY,
name varchar(50) NOT NULL,
age integer,
created_at timestamp,
updated_at timestamp
);テーブル定義はマイグレーションファイルに記述します。
マイグレーションファイルはartisanコマンドで生成します。
php artisan make:migration --create=members create_members_table
このコマンドで、membersテーブルを自動生成するためのマイグレーションファイルが生成されます。
書式は次のとおりです。
php artisan make:migration --create=作成するテーブル名 マイグレーションファイル名
マイグレーションファイルは、database/migrationsフォルダに作成されます。
「2020_07_30_055211_create_members_table.php」のように指定したファイル名の前に日付やタイムスタンプがついたファイル名で作成されています。
中を見てみましょう。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMembersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('members', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('members');
}
}
クラスの中にup(), down()の2つのメソッドが書かれています。
upメソッドに、作成するテーブルの定義を書きます。
upメソッドを次のように書き換えてみましょう。
public function up()
{
Schema::create('members', function (Blueprint $table) {
$table->increments('id');
$table->string('name',50);
$table->integer('age')->nullable();
$table->timestamps();
});
}$tableが持っているメソッドを使って列を定義しています。
順番に見ていきます。
$table->increments(‘列名’)
incrementsメソッドは、serial型かつ主キーの列を定義します。
$table->string(‘列名’,長さ)
stringメソッドは、varchar型の列を定義します。第2引数に長さを指定します。
$table->integer(‘age’)
integerメソッドは、integer型の列を定義します。
->nullable()のようにnullableメソッドを追加で実行すると、その列はNULL許可になります。
$table->timestamps()
timestampsメソッドは、created_at列とupdated_at列の2つを同時に定義します。ともにtimestamp型でNULL許可になります。
$table->timestamp(‘列名’)
任意のtimestamp型の列を定義したい場合は、timestampメソッドを使います。
これで、マイグレーションファイルが完成しました。
マイグレーションを実行して、テーブルを自動生成してみましょう。
マイグレーションの実行はartisanコマンドで行います。
php artisan migrate
成功すると、データベースにmembersテーブルが生成されました。
実行したマイグレーションを取り消す、つまり作ったテーブルを削除することもできます。
次のコマンドで今実行したマイグレーションを取り消してみましょう。
php artisan migrate:rollback
成功すると、データベースからmembersテーブルが消えました。
この操作はマイグレーションのロールバックといいます。
マイグレーションの実行はupメソッドが実行されることで定義通りのテーブルが作られるのに対して、ロールバックはdownメソッドが実行されます。downメソッドの中にはmembersテーブルをdropする、つまり削除するように記述されています。
このように、テーブル定義をマイグレーションに記述しておくことによって、テーブルの追加・削除が容易になります。
