尽管配置相反,Doctrine 坚持尝试使用 PostgreSQLDriver

Doctrine insists on trying to use PostgreSQLDriver despite contrary config

我正在设置 Symfony 5.2 应用程序,使用 doctrine/doctrine-bundle 2.4 和 doctrine/orm 2.9。我的 doctrine.yaml 配置文件如下所示:

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'
        driver: 'pdo_mysql'
        server_version: '5.7'
        # IMPORTANT: You MUST configure your server version,
        # either here or in the DATABASE_URL env var (see .env file)
        #server_version: '13'
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

问题是当我 运行 doctrine:fixtures:load 时,我得到以下输出:

In AbstractPostgreSQLDriver.php line 102:

  An exception occurred in driver: could not find driver


In Exception.php line 18:

  could not find driver


In PDOConnection.php line 39:

  could not find driver

看起来 Doctrine 正在尝试使用 Postgre 驱动程序,尽管我已经指定 MySQL。还有其他我需要配置的地方吗?如果可以,怎么做?

===

编辑:看起来 DATABASE_URL 在我的 Docker 容器中不可用,这可能是问题的根源。我已经验证 DATABASE_URL 是在我的 .env 文件中定义的,并且我的 .env 文件与我的 docker-compose.yml 文件位于同一文件夹中。另外,我在 docker-compose 文件中对环境变量进行了这样的设置:

environment:
  - DATABASE_URL

所以我不太确定这里出了什么问题。

我认为您的 .env 文件中的 DATABASE_URL 有误。请检查它是否以 mysql://.

开头

我相信 symfony 使用 dotenv 包将值从 .env 加载到 S_ENV 超全局。您需要调试您的 dotenv(您的项目中有一个 .env,它是 而不是 .env.local 或 .env.dist)是否正确加载。

我刚开始时有时会发生这种情况,通常是在克隆一个 Github 项目时,该项目具有由 Doctrine 创建的默认 .env 文件,当它通过 composer 安装时,默认情况下 Doctrine 使用 PostgreSQL URL.

看看您记录了多少 .env 文件,我确定有人覆盖了您的 URL 连接。

查看此 Whosebug post 了解 .env.* 文件之间的区别