
LaravelのMigrationを使ってMySQLのテーブルにカラムを追加してみます。
テーブルを作成するときに使ったマイグレーションファイルを変更するとロールバックしたときに、テーブルが消えてしまうので、カラムの更新時には別のマイグレーションファイルを作るようにしましょう。
今回はPOST(posts)テーブルにnameというカラムを追加してみます。
初回に作成したマイグレーションファイルの確認
現在はid , body , timestamps(created_at , updated_at)が存在しています。
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->string('body'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('posts'); } }
update用ファイルの作成
$ php artisan make:migration update_posts_table --table=posts
updateコマンドを実行すると
「/database/migrations/2020_04_15_081733_update_posts_table.php」が生成されます。
nameカラムを追加します。
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class UpdatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('posts', function (Blueprint $table) { $table->string('name'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('posts', function (Blueprint $table) { // }); } }
ファイルを変更したらマイグレーションを実行します。
$ php artisan migrate
最後にnameが追加されました。しかしこれだと気持ち悪いので、nameはidのすぐ後ろに追加したいところです。
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class UpdatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('posts', function (Blueprint $table) { $table->string('name')->after('id'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('posts', function (Blueprint $table) { // }); } }
カラムを追加する時に
$table->string(‘name’)->after(‘id’);
とafterを使えば、idのすぐ後ろにnameが追加されます。
良い感じに追加されました。