商売力開発ブログ

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

Laravelのマイグレーション機能の活用④ カラム定義のメソッド設定例

【スポンサーリンク】

今回はPHPフレームワークの一つのLaravelの中から、データベースのマイグレーションの機能の利用に当たって、我々の活用方法を紹介します。
今回利用するDBはMySQLですが、一部については他のDBでもほぼ同様に対応できます。
前回説明したカラムの共通定義用のファサードのメソッドの設定について、具体的に紹介します。
www.prj-alpha.biz
また他のマイグレーションに関連する内容は以下を参照して下さい。

Laravelのデータベースのマイグレーション機能 順番を強引に入れ替えることも可能 - 商売力開発ブログ
Laravelのマイグレーション機能の活用① メンバ変数を追加した上でテーブルのコメント追加も簡単に設定する方法 - 商売力開発ブログ
Laravelのマイグレーション機能の活用② 1つのファイルで複数のテーブル管理も可能 - 商売力開発ブログ
Laravelのマイグレーション機能の活用⑤ 複数テーブルに同じカラムを追加する - 商売力開発ブログ

カラムの共通設定用のメソッド

前回の記事で、カラム名を指定することで定義を設定できるようなメソッドについて書きました。Laravelのファサード(MigrationFuncとします)を使用してメソッド(columnDefとします)の定義をすることで、マイグレーションファイルに以下のような記述をすることでカラムの定義ができるようにします。

MigrationFunc::columnDef($table,'group_cd');

このMigrationFuncファサードのメソッドの引数の定義は以下のようにし、この定義の具体的な実装部分を紹介します。

public function columnDef(Blueprint $table,$column_name,$nullable_flg=false,$default=null)

引数には以下を設定します。

  • $table:Schema::createやSchema::tableでカラム定義を設定するBlueprintインスタンスです
  • $column_name:設定対象のカラム名です
  • $nullable_flg:nullableを設定するかです、省略・指定がない場合はカラムは必須となります
  • $default:デフォルト値の設定用です、省略・指定がない場合はカラムのデフォルト値は設定しません

カラムの共通定義は連想配列などで以下のようなものとし、今回はMigrationFuncファサード内に設定しておきます。設定するタイプに応じて必要な値を追加しておきます。例えばstring型の場合はlenghtを追加して、設定する際にデータ長にします。

$columnSet = [
    'id' => ['type'=>'increments','comment'=>'ID'],
    'name' => ['type'=>'string','length'=>255,'comment'=>'名前'],
    'group_cd' => ['type'=>'string','length'=>5,'comment'=>'グループCD'],
];

ちなみにcommentはMySQLの場合、列に設定することができます。
続いて、指定されたカラム名から対象となる定義を取得し、データ型を指定します。データ型ごとに設定するメソッドが違いますので、それぞれ別けて設定する必要があります。ここでは、switch文で対応しています。また指定できるデータ型ごとのメソッドはかなり多いので、必要なものについて設定して下さい。

//対象のカラムセットを取得
$targetCol=$columnSet[$column_name];

//データ型の指定
switch($targetCol["dataType"]){
    case "increment":
        //incrementの設定
        $tblSetter=$_table->bigIncrements($column_name);
        break;
    case "text":
        //textの設定
        //defaultは設定できない
        $tblSetter=$_table->text($column_name);
        break;
    case "string":
        //stringの設定
        $tblSetter=$_table->string($column_name,$targetCol["length"]);
        break;
    case "dateTime":
        //dateTimeの設定
        $tblSetter=$_table->dateTime($column_name);
        break;
    case "date":
        //dateの設定
        $tblSetter=$_table->date($column_name);
        break;
    case "flg":
        //flgの設定
        $tblSetter=$_table->boolean($column_name);
        break;
    case "tinyInteger":
        //tinyIntegerの設定
        $tblSetter=$_table->tinyInteger($column_name);
        break;
    case "unsignedTinyInteger":
        //unsignedTinyIntegerの設定
        $tblSetter=$_table->unsignedTinyInteger($column_name);
        break;
    case "integer":
        //integerの設定
        $tblSetter=$_table->integer($column_name);
        break;
    case "double":
        //doubleの設定
        $tblSetter=$_table->double($column_name,$targetCol["length"],$targetCol["decimal"]);
        break;
    default:
        //設定がない場stringで設定する
        $tblSetter=$_table->string($column_name,255);
        break;
}

カラムの定義のあとに、nullableなどの設定を追加で行います。データ型を設定した変数:$tblSetterに追加で設定します。

//必須の解除
if($nullable_flg){
    $tblSetter->nullable();
}
//デフォルト
if($default!==null){
    $tblSetter->default($default);
}
//コメントの設定
//MySQLのみ設定可能
$tblSetter->comment($targetCol["comment"]);

最終的にはこの変数:$tblSetterをreturnします。こちらをreturnすることでマイグレーションファイル側で追加で別の設定を行うことも可能となります。

return $tblSetter;

以上がカラム定義のメソッドの設定例です。

カラム定義のコメントの設定について(MySQLの場合のみ)

カラム定義のコメントはMySQLのみ設定可能ですが、このコメントにルールを設けうると確認が楽になることがあります。例えば、データ型ごとにコメントの先頭に同一の記号などを設定しておきます。

$columnSet = [
    'id' => ['type'=>'increments','comment'=>'●ID'],
    'name' => ['type'=>'string','length'=>255,'comment'=>'■名前'],
    'group_cd' => ['type'=>'string','length'=>5,'comment'=>'■グループCD'],
];

このようなルールを設けておくと、MigrationFunc::columnDefで設定したカラムは先頭に特定の記号のあるコメントが付くようになります。

MigrationFunc::columnDef($table,'group_cd');

標準の設定方法のカラムのコメントでは記号を付けないようにすることで、MigrationFunc::columnDefで設定したカラムと区別できるようにしてます。

$table->string('group_cd',5)->comment('グループCD');

ちょっとしたことですが、共通定義で設定されたカラムか簡単に分かるようになります。

まとめ

今回はLaravelのマイグレーションの我々の活用方法のうちカラムの共通定義用のファサードのメソッドの設定を紹介しました。
新規サービスの開発段階では一部は使える方法ではないかと思いますので、参考にしてみて下さい。

以上

【関連するリンク】 www.prj-alpha.biz www.prj-alpha.biz www.prj-alpha.biz www.prj-alpha.biz www.prj-alpha.biz

【スポンサーリンク】