【Laravel】PrimaryKeyを外してカラムをnullableにするマイグレーションの書き方

# 概要

`PrimaryKey`に指定していたカラムが`NULL`を許容するため`DDL`を更新しようとすると以下のエラーが発生したので解決方法をまとめる

```bash
 Syntax error or access violation: 1171 All parts of a PRIMARY KEY must be NOT NULL;
```

```php:ChangeProfileIdToTabletStaffMaps.php
class ChangeProfileIdToTabletStaffMaps extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('tablet_staff_maps', function (Blueprint $table) {
            $table->dropPrimary('tablet_staff_maps_tablet_uuid_staff_id_profile_id_primary');
            $table->dropUnique('tablet_staff_maps_tablet_uuid_staff_id_profile_id_unique');
            $table->primary(['tablet_uuid', 'staff_id']);
            $table->unique(['tablet_uuid', 'staff_id']);
            $table->unsignedBigInteger('profile_id')->comment('プロフィールID')->nullable()->change();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('tablet_staff_maps', function (Blueprint $table) {
            $table->dropPrimary('tablet_staff_maps_tablet_uuid_staff_id_primary');
            $table->dropUnique('tablet_staff_maps_tablet_uuid_staff_id_unique');
            $table->primary(['tablet_uuid', 'staff_id', 'profile_id']);
            $table->unique(['tablet_uuid', 'staff_id', 'profile_id']);
            $table->unsignedBigInteger('profile_id')->comment('プロフィールID')->change();
        });
    }
}
```

# 環境
- PHP 7.4.25
- Laravel Framework 6.20.44

# 解決方法

こちらの記事を参考にしました。
記事の題名通りなのですが処理を分割して記述することが必要になります

https://qiita.com/kazuhei/items/484ffe1fb8d9cbb056c1

```php:ChangeProfileIdToTabletStaffMaps.php
class ChangeProfileIdToTabletStaffMaps extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('tablet_staff_maps', function (Blueprint $table) {
            $table->dropPrimary('tablet_staff_maps_tablet_uuid_staff_id_profile_id_primary');
        });

        Schema::table('tablet_staff_maps', function (Blueprint $table) {
            $table->dropUnique('tablet_staff_maps_tablet_uuid_staff_id_profile_id_unique');
        });

        Schema::table('tablet_staff_maps', function (Blueprint $table) {
            $table->primary(['tablet_uuid', 'staff_id']);
            $table->unique(['tablet_uuid', 'staff_id']);
            $table->unsignedBigInteger('profile_id')->comment('プロフィールID')->nullable()->change();
        });


    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('tablet_staff_maps', function (Blueprint $table) {
            $table->dropPrimary('tablet_staff_maps_tablet_uuid_staff_id_primary');
        });

        Schema::table('tablet_staff_maps', function (Blueprint $table) {
            $table->dropUnique('tablet_staff_maps_tablet_uuid_staff_id_unique');
        });

        Schema::table('tablet_staff_maps', function (Blueprint $table) {
            $table->primary(['tablet_uuid', 'staff_id', 'profile_id']);
            $table->unique(['tablet_uuid', 'staff_id', 'profile_id']);
            $table->unsignedBigInteger('profile_id')->comment('プロフィールID')->change();
        });
    }
}
```