Laravelのmigration classでchangeメソッドが使用できない


現象

ある既存のカラムでNULL値を許可orDEFAULT値を設定するようにしたく、
migrationを実行したところ以下のエラーに遭遇。

RuntimeException:Changing columns for table "テーブル名" requires Doctrine DBAL.
Please install the doctrine/dbal package.

対処法

素直にdoctrine/dbal packageをcomposerでinstallする。

composer require doctrine/dbal
Using version ^3.0 for doctrine/dbal
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 4 installs, 0 updates, 0 removals
  - Installing composer/package-versions-deprecated (1.11.99.1): Downloading (100%)         
  - Installing doctrine/event-manager (1.1.1): Downloading (100%)         
  - Installing doctrine/cache (1.10.2): Downloading (100%)         
  - Installing doctrine/dbal (3.0.0): Downloading (100%) 
  ...

よし、これでOK。
再度migrationを実行してみます。

Migrating : 2021_03_01_001211_modify_employees_table_20210301

Symfony\Component\Debug\Exception\FatalThrowableError  
: Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found

Driverがないだと。。。
こういう時こそ落ち着いて、エラー文で示してくれているディレクトリの中を覗くと原因が判明する。
vendor/doctrine/dbal/src/Driver/

こちらのパスにPDOMySqlが存在しなかった。

他にも同様の現象に出くわしている方がいると期待し検索

[laravel] doctrine/dbalを入れたのに「Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found」と言われる

こちらの方が仰られている通り、
ver3.x系(先程installしたversion)とver2.x系とではディレクトリ構成が変わっていました。
気を取り直し、バージョンを指定しinstallし直す。

composer require "doctrine/dbal:2.*"
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 0 installs, 1 update, 0 removals
  - Downgrading doctrine/dbal (3.0.0 => 2.12.1): Downloading (100%)  
 ...

最後に以下を実行し無事解決に至る。(多謝)

php artisan migrate:refresh --seed
該当のmigrationファイル
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class ModifyEmployeesTable20210301 extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('employees', function (Blueprint $table) {
            $table->string('first_name')->nullable()->change();
            $table->string('last_name')->nullable()->change();
            $table->tinyInteger('email_verified')->default(0)->after('email_verified_at');
            $table->string('email_verify_token')->nullable()->after('email_verified');
            $table->tinyInteger('status')->default(0)->after('email_verify_token');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('employees', function (Blueprint $table) {
            $table->string('first_name')->nullable(false)->change();
            $table->string('last_name')->nullable(false)->change();
            $table->dropColumn('email_verified');
            $table->dropColumn('email_verify_token');
            $table->dropColumn('status');
        });
    }
}

まだまだ未熟者ですが、
経験を蓄積していく為に記事にして残すことを決意した次第です。
今後とも先輩方、宜しくお願い致します。