[Laravel] Migrationでカラムを追加する

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のすぐ後ろに追加したいところです。
2020-04-15_17h21_37

<?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が追加されます。
2020-04-15_17h42_08
良い感じに追加されました。



Author: webmaster