尽管配置相反,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.* 文件之间的区别
我正在设置 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.* 文件之间的区别