nazoです。
Doctrine DBALを2.4で使っていたのですが、2.5にすると、データベース削除コマンドであるdoctrine:database:drop
が、以下のようにif-exists
をつけていてもエラーが出るようになってしまいました。
% app/console doctrine:database:drop --if-exists [Doctrine\DBAL\Exception\ConnectionException] An exception occured in driver: SQLSTATE[HY000] [1049] Unknown database 'dbname' [Doctrine\DBAL\Driver\PDOException] SQLSTATE[HY000] [1049] Unknown database 'dbname' [PDOException] SQLSTATE[HY000] [1049] Unknown database 'dbname'
issueを探してみると、「(データベースサーバの)バージョン指定しないと駄目だよ」というのを見つけました。Symfony側のドキュメントにも書いてあるようです。
Doctrine DBAL 2.5からは、DBサーバのバージョンが指定されていない場合は、自動取得するようになり、その際に接続を作りに行く時に先に接続してしまうので、エラーになってしまうという挙動のようです。
この挙動自体がバグなのかどうかは不明ですが、どちらにしてもバージョンを事前に指定しておくことによって、バージョンを自動取得することがなくなり高速化に繋がるようなので、指定しておいたほうがいいかと思います。
バージョンの指定方法は、Symfonyのドキュメントにも書いてありますが、以下のような書き方になります。
doctrine: dbal: default_connection: default connections: default: dbname: Symfony user: root password: null host: localhost server_version: 5.6 # ここでバージョンを指定
Doctrine DBALを最新にして同様の症状で困った場合は参考にしてください。