こんにちは!ドイです!!
先日、初めてDB設計をやったのですが、
後からどんどん出てくる型の間違えや、カラム追加…
マイグレーションファイルを使って修正しましたので、まとめていきたいと思います。
テーブル作成
upに作成するテーブルについて、
downはロールバックする際の処理を書きます。
<?php public function up() { Schema::create('reserves', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name')->comment('名前'); $table->string('cat_name')->comment('猫の名前'); $table->mediumText('purpose')->comment('目的'); $table->TinyInteger('car_number')->comment('車の台数'); $table->rememberToken(); $table->timestamps(); $table->softDeletes(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('reserves'); }
カラム追加
「after」を使って、どのカラムの後ろにカラムを追加するのか指定できます。
<?php public function up() { Schema::table('reserves', function (Blueprint $table) { $table->string('addres')->after('name')->comment('住所'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('reserves', function (Blueprint $table) { $table->dropColumn('addres'); }); }
カラム名変更
おっと、「address」の綴りが違うようです。
修正したいと思います。
upでは
<?php $table->renameColumn('修正するカラム名' , '修正後のカラム名');
downでは
<?php $table->renameColumn('修正後のカラム名' , '修正前のカラム名');
と記述します。
<?php public function up() { Schema::table('reserves', function (Blueprint $table) { $table->renameColumn('addres' , 'address'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('reserves', function (Blueprint $table) { $table->renameColumn('address' , 'addres'); }); }
カラム削除
reservesテーブルに「cat_name」は不要だったようです。
こちら削除します。
<?php public function up() { Schema::table('reserves', function (Blueprint $table) { $table->dropColumn('cat_name'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('reserves', function (Blueprint $table) { $table->string('cat_name'); }); }
カラムの型変更
mediumTextからstringに変更
<?php public function up() { Schema::table('reserves', function (Blueprint $table) { $table->string('purpose')->comment('目的')->change(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('reserves', function (Blueprint $table) { $table->mediumText('purpose')->comment('目的')->change(); }); }
カラムのNULL制約を変更
こちらが厄介でした。
というのも、laravelではchangeメソッドで変更できる型に制約があるからです。
以降のカラムタイプのみ変更可能です:bigInteger、binary、boolean、date、dateTime、dateTimeTz、decimal、integer、json、longText、mediumText、smallInteger、string、text、time、unsignedBigInteger、unsignedInteger and unsignedSmallInteger
ALTER TABLEで修正していきたいと思います。
<?php public function up() { Schema::table('reserves', function (Blueprint $table) { DB::statement('ALTER TABLE `reserves` MODIFY `car_number` TINYINT DEFAULT NULL;'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('reserves', function (Blueprint $table) { DB::statement('ALTER TABLE `reserves` MODIFY `car_number` TINYINT NOT NULL;'); }); }
まとめ
一人で開発、もしくは案件が始まったばかりでは、
テーブルを作り直してしまった方が早い場合もあります。
今回は、テーブル削除できず、修正に修正を重ねる必要があったため大変でした。
もちろん修正できるに越したことはありませんが、仕様を固める段階で、
漏れのないDB設計書を作っていけたらなと思います。