Laravel php artisan migrate後 requires Doctrine DBALのエラー

change()関数などを含むデータベースを修正するパッチファイル作成後、

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

のエラーが出る場合。

 

composer require "doctrine/dbal:2.*

コマンドを叩くと解決する。

 

エラー内容とか

マイグレート後、ドクトリンが必須だ!とか言いやがる。

root@8bcb338cb044:/var/www/ecapp# php artisan migrate
Migrating: 2022_06_11_151715_change_users_to_icon_table_defaultvalue

RuntimeException

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

at vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php:30
26? */
27? public static function compile($grammar, Blueprint $blueprint, Fluent $command, Connection $connection)
28? {
29? if (! $connection->isDoctrineAvailable()) {
? 30? throw new RuntimeException(sprintf(
31? 'Changing columns for table "%s" requires Doctrine DBAL. Please install the doctrine/dbal package.',
32? $blueprint->getTable()
33? ));
34? }

+6 vendor frames
7 database/migrations/2022_06_11_151715_change_users_to_icon_table_defaultvalue.php:18
Illuminate\Support\Facades\Facade::__callStatic("table")

+21 vendor frames
29 artisan:37
Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)

なんで初めから入ってへんねんカス

 

解決策

Laravel6や8ならdoctrineのdbal:2をインストールすると解決する。

7は使ったことないけど、一緒のはず。

9はわからん。

 

アプリのプロジェクトディレクトリ直下で、

composer require "doctrine/dbal:2.*

を叩く。

Dockerを使っているなら、コンテナの中のプロジェクトディレクトリ直下でたたく。

 

これでphp artisan migrateが通るようになる。

 

バージョン指定せずに最新版入れちゃった愚か者へ

 

 

 

はい残念!!動きませんwwwwww うっぴょーーーーwwwwwwwww

 

 

 

 

 

 

 

 

 

 

 

 

バージョン指定せずに入れると、最新版?(3?)が入ってしまいコマンドが通らないままになる。
もし動かないバージョンを入れてしまった場合は、プロジェクトディレクトリ直下のvenderを丸ごと削除
rm -rf vendor/
composer.jsonのドクトリンの行を丸ごと削除
vim composer.json
composer.lockも消す
rm -rf composer.lock
コンポーザーを入れ直す
composer install
↑これを叩くとcomposer.jsonに書いているパッケージがインストールされる
 故にベンダーディレクトリの中にライブラリが入ってくる
改めてバージョン2をインストール
composer require "doctrine/dbal:2.*"

 

ドクトリンを入れたらサイトがまるごと表示されなくなった場合

ブラウザ上のエラー
include(/var/www/ecapp02/vendor/composer/../doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Rules.php): failed to open stream: No such file or directory
アプリケーションフォルダ直下のvenderを丸ごと削除
rm -rf vendor/
composer.jsonのドクトリンの行を丸ごと削除
vim composer.json
composer.lockも消す
rm -rf composer.lock
コンポーザーを入れ直す
composer install
とりあえず動かんくなったら元に戻したらいいって話。
ライブラリのバージョンの相性によるトラブルはだいたいこれで解消できるらしい。

 

 

 

 

参考にしたサイト

【Laravel】composer require doctrine/dbalを実行した後にエラーがでる時の対処法 | eclairのブログ

 

 

 

 

 

 

無制限に質問可能なプログラミングスクール!

万が一転職できない場合は、転職保障全額返金できるコースもあり!!

無制限のメンター質問対応

 

DMMウェブキャンプでプログラミングを学習しませんか?

独学より成長スピードをブーストさせましょう!

 

まずは無料相談から!

おすすめの記事