商売力開発ブログ

非エンジニアがWebサービスの開発、運営によって商売力をつける記録、その他の雑記

Laravelのマイグレーション機能の活用① メンバ変数を追加した上でテーブルのコメント追加も簡単に設定する方法

【スポンサーリンク】

今回はPHPフレームワークの一つのLaravelの中から、データベースのマイグレーションの機能の利用に当たって、我々の活用方法を紹介します。
今回利用するDBはMySQLですが、他のDBでもほぼ同様に対応できます。
またマイグレーションに関連する内容は以下を参照して下さい。

Laravelのデータベースのマイグレーション機能 順番を強引に入れ替えることも可能 - 商売力開発ブログ
Laravelのマイグレーション機能の活用② 1つのファイルで複数のテーブル管理も可能 - 商売力開発ブログ
Laravelのマイグレーション機能の活用③ カラム定義の管理を楽にする方法 - 商売力開発ブログ

Laravelのマイグレーションファイルの変更

以下はLaravelのマイグレーションファイルの例です。

class CreateSamplesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('samples', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name',255);
            $table->string('foreign_cd',5);
            $table->integer('sample_num');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('samples');
    }
}

テーブルのコメントを設定する

今回はMySQLを使用していますが、作成したテーブルにコメントを設定したいと思います。テーブルのコメントを設定するメソッドは用意されていませんが、DBファサードのstatementメソッドを使用すれば任意のSQLが実行できるようになっています。つまりテーブルを作成した後に、statementメソッドを利用して「ALTER TABLE」を実行してテーブルに対して変更を加えることが可能です。コメントの場合は以下のようにします。

DB::statement("ALTER TABLE ".DB::getTablePrefix()."samples COMMENT 'サンプルテーブル'");

これをそのまま追加するのも良いですが、「samples」というテーブル名はupメソッド、downメソッドの他の部分にも使用されています。であればこのクラスのプロパティ(メンバ変数)としてテーブル名を設定した方が良さそうです。

class CreateSamplesTable extends Migration
{
    public $tbl_name='samples';//テーブル名のプロパティ追加
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create($this->tbl_name, function (Blueprint $table) {
            $table->increments('id');
            $table->string('name',255);
            $table->string('foreign_cd',5);
            $table->integer('sample_num');
        });
        // add comments
        DB::statement("ALTER TABLE ".DB::getTablePrefix().$this->tbl_name." COMMENT 'サンプルテーブル'");
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists($this->tbl_name);
    }
}

tbl_nameプロパティを追加して、upメソッドのSchema::createとコメント設定部分、downメソッドのSchema::dropIfExistsにこのプロパティを設定しました。
これで、このマイグレーションファイルをコピーして別のテーブルを作成する場合、テーブル名に関してはこのプロパティを変更するだけで問題ないようになりました。ちょっとした内容ですが、downメソッドのテーブル名を間違っている場合はロールバックするまで気付かなかったりするので、この対応をしておくと気にする必要がなくなります。

まとめ

今回はLaravelのマイグレーションの我々の活用方法の一部を紹介しました。
ここまでで準備が整った状態です。ここからはまた別の機会で紹介します。

以上

【関連するリンク】

【スポンサーリンク】