福岡拠点の香月です。
前回はDBのマイグレーションを行いました。
既にマイグレーション実行済みのテーブルに変更を行いたい場合、アプリケーションが稼働する前であればロールバックしてマイグレーションをやり直せばいいのですが、本稼働後のバージョンアップなどでデータを棄損することなくテーブルにフィールドを追加したいことがあります。この場合、フィールド追加用のマイグレーションを実施することになります。
まずは前回と同じようにマイグレーションファイルを作成しましょう。
1 |
# php artisan make:migration alter_scores_table |
これによりdatabase/migrations/(日付)alter_scores_table.phpが作成されますので、ここに追加したいフィールドを記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AlterScoresTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('scores', function(Blueprint $table) { $table->integer('score')->after('exam_day'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('scores', function(Blueprint $table) { $table->dropColumn('score'); }); } } |
up()メソッドにマイグレーション実施時のコードとして、scoreフィールドをexam_dayの後ろに追加するようにしています。
もちろんクロージャの中では必要なフィールドを1つだけではなく複数記述できます。文字列フィールド、timestampフィールドなど用途に合わせて追加しましょう。
カラム修飾子には->after()を使用しています。これ以外にもnullを許容する->nullable()、コメント文字列を指定する->comment()などいろいろ使えますよ。
down()メソッドにはロールバック実施時に実行されるコードを記述します。ここ忘れがちなので注意!
マイグレーションファイルを作成したら、マイグレーションを実施します。
1 |
# php artisan migrate |
マイグレーションが実施されていないファイルを対象に実施されます。同じファイルが2度3度と実施されることはないので安心してください。
実行後に反映されたことを確認しましょう。
1 2 3 4 5 6 7 8 9 |
# php artisan migrate:status +------+------------------------------------------------+-------+ | Ran? | Migration | Batch | +------+------------------------------------------------+-------+ | Yes | 2014_10_12_000000_create_users_table | 1 | | Yes | 2014_10_12_100000_create_password_resets_table | 1 | | Yes | 2018_xx_xx_xxxxxx_create_scores_table | 1 | | Yes | 2018_xx_xx_xxxxxx_alter_scores_table | 2 | +------+------------------------------------------------+-------+ |