マイグレーション(テーブルの更新)

メモ:  Category:blog

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

bluenote by BBB