カラムの共通設定用のメソッド
前回の記事で、カラム名を指定することで定義を設定できるようなメソッドについて書きました。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');
ちょっとしたことですが、共通定義で設定されたカラムか簡単に分かるようになります。