今回はPHPフレームワークの一つのLaravelの中から、データベースのマイグレーションの機能の利用に当たって、我々の活用方法を紹介します。
今回利用するDBはMySQLですが、他のDBでもほぼ同様に対応できます。
またマイグレーションに関連する内容は以下を参照して下さい。
Laravelのデータベースのマイグレーション機能 順番を強引に入れ替えることも可能 - 商売力開発ブログ
Laravelのマイグレーション機能の活用① メンバ変数を追加した上でテーブルのコメント追加も簡単に設定する方法 - 商売力開発ブログ
Laravelのマイグレーション機能の活用③ カラム定義の管理を楽にする方法 - 商売力開発ブログ
Laravelのマイグレーション機能の活用④ カラム定義のメソッド設定例 - 商売力開発ブログ
Laravelのマイグレーション機能の活用⑤ 複数テーブルに同じカラムを追加する - 商売力開発ブログ
Laravelの一つのマイグレーションファイルで複数のテーブルを管理する
今回は以前に紹介しました以下の雛形となるマイグレーションファイルを基にします。
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); } }
マイグレーションファイルはupとdownの2つのメソッドで構成され、upメソッドがマイグレーションの実行時の対象メソッドで、downメソッドがロールバックやリセットの対象メソッドとなることは以前説明しました。このupメソッドとdownメソッドを変更することで、複数のテーブルを一つのマイグレーションファイルで管理することも可能です。
class CreateSamplesTable extends Migration { public $tbl_name='samples';//テーブル名のプロパティ追加 public $tbl_name2='samples2';//もう一つのテーブル名のプロパティ追加 /** * 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 'サンプルテーブル'"); Schema::create($this->tbl_name2, 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_name2." COMMENT 'サンプルテーブル2'"); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists($this->tbl_name); Schema::dropIfExists($this->tbl_name2); } }
このようにすることで複数のテーブルを一つのマイグレーションファイルで管理することができます。同じ構造となるテーブルがある場合、マイグレーションを別けるよりも同じマイグレーションで管理しておくことで、後にカラムの変更がある場合など対象となるテーブルの漏れを防ぐのに役立ちます。
データベースのマイグレーションの管理をすることが目的なので、必ずしもテーブルごとに管理することなく、このようなやり方も可能です。