LoginSignup
93
40

More than 3 years have passed since last update.

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

Posted at

DB設計の変更により
テーブルのカラムの型変換をしようとしました。

database/migrations/2020_11_17_203408_modify20201117_stations_table.php
    public function up()
    {
        //
        Schema::table('stations', function (Blueprint $table) {
            $table->smallInteger('xxxxx')->nullable()->default(NULL)->change();
        });
    }

php artisan migrate するとエラーが出ました。

Migrating: 2020_11_17_203408_modify20201117_stations_table

   RuntimeException 

  Changing columns for table "stations" requires Doctrine DBAL. Please install the doctrine/dbal package.

おっといかん、doctrine/dbal を入れないまま change() してしまったか…
composerでインストールせねば

$ 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
...

よし入った
改めてphp artisan migrate

Migrating: 2020_11_17_203408_modify20201117_stations_table

   Error 

  Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found

ん?

え、今入れたよね?
あ、エラーの内容が最初と違う?

該当のファイルが存在しないとのことなので
vendor以下を確認してみる

$ ll vendor/doctrine/dbal/src/Driver/
...
-rw-rw-r--. 1 vagrant vagrant  168 Nov 15 18:20 Middleware.php
drwxrwxr-x. 4 vagrant vagrant  144 Nov 15 18:20 Mysqli
drwxrwxr-x. 3 vagrant vagrant  175 Nov 15 18:20 OCI8
drwxrwxr-x. 7 vagrant vagrant  153 Nov 15 18:20 PDO
-rw-rw-r--. 1 vagrant vagrant 2497 Nov 15 18:20 Result.php
-rw-rw-r--. 1 vagrant vagrant  397 Nov 15 18:20 ServerInfoAwareConnection.php
...

なるほど、PDOはあるけどPDOMySqlはないな。

$ ll vendor/doctrine/dbal/src/Driver/PDO/
...
-rw-rw-r--. 1 vagrant vagrant  591 Nov 15 18:20 Exception.php
drwxrwxr-x. 2 vagrant vagrant   24 Nov 15 18:20 MySQL
drwxrwxr-x. 2 vagrant vagrant   24 Nov 15 18:20 OCI
drwxrwxr-x. 2 vagrant vagrant   24 Nov 15 18:20 PgSQL
...

PDOディレクトリの下にMySQLがあるな…
えーとつまり、バージョンが変わって、ディレクトリの構成が変更になったとかそういうことかな?

3.0系の構成を確認してみる
https://github.com/doctrine/dbal/tree/3.0.x/src/Driver
image.png

うん、インストールされているのはこの構成だ。
では前のバージョンは…

image.png

あっPDOMySqlさんいる

えーとつまり

  • composer require doctrine/dbalだけでインストールすると、今は3.x系が入ってしまう
  • 3.x系はDriverディレクトリの構成が変わっているので、migrateする時に2.x系にあったPDOMySqlがnotfoundになる

ということか

$ 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
Migrating: 2020_11_17_203408_modify20201117_stations_table
Migrated:  2020_11_17_203408_modify20201117_stations_table (133.37ms)

doctrine/dbal をバージョン指定で入れ直し、無事migrateできました。

※バージョンによる今だけの一時的な現象だと思いますが、そこそこ迷走したので、誰かの手助けになれば。

93
40
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
93
40