マイグレーション(テーブルの更新)
Laravel では、マイグレーションと呼ばれる機能を使ってデータベース上にテーブルを変更することができます。
ここでは、マイグレーション機能を使ってテーブルを変更してみます。
テーブル構造の変更
Laravel でテーブルを変更するには、 作成と同じく Artisan コマンドを使ってマイグレーションファイルを作成します。
$ php artisan make:migration [マイグレーションファイル名]
マイグレーションファイル名には、どのような名前を付けてもいいようですが Laravel で作成されたオープンソースプロジェクトなどを参考にすると、変更の場合は [変更内容]to[テーブル名]_table とつけているようです。テーブル名は、複数形の名前を付けます。 to の部分は、内容に応じて in や from が使われているようです。
Illuminate\Database\Console\Migrations\TableGuesser を見るとテーブル名を推定しているような部分があります。
preg_match('/_(to|from|in)_(\w+)_table$/', $migration, $matches)
例えば、次のコマンドを実行すると database/migrations 配下に [日時]_add_column_is_active_to_users_table.php ファイルが作成されます。
php artisan migrate:make add_column_is_active_to_users_table
生成されたマイグレーションファイルには、初期定義として次のように記述されています。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddColumnIsActiveToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
//
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
//
});
}
}
生成されたクラスには、 up() と down() の2つのメソッドが用意されています。 up() にはテーブルやカラム、インデックスの定義を記述し、 down() には up() メソッドが行った操作を元に戻す処理を記述します。
class AddColumnIsActiveToUsersTable extends Migration
{
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->char('isactive',1)->after('name');
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumns('isactive');
});
}
}
Schema::table(‘users’, function (Blueprint $table) で更新するテーブルを指定しています。
$table->char(‘isactive’,1)->after(‘name’); で isactive という char型の列を追加しています。
after(‘name’) は、 name 列の後ろに追加するという指定になります。
down()の $table->dropColumns(‘isactive’); は、 up() で追加した isactive という列を削除しています。
テーブルの修正定義が作成出来たら、次のコマンドを実行してデータベースのテーブルを更新します。
$ php artisan migrate