Symfony 4测试环境SQLite数据库创建异常排查求助
解决Symfony 4测试环境SQLite数据库创建失败问题
看起来你踩了多实体管理器配置的坑——你的项目里有gui和upv6两个实体管理器,它们默认绑定的是MySQL连接,而你在test环境只配置了默认SQLite连接,但没同步更新实体管理器的连接指向。这就是为什么你看到的是MySQL错误码(1050),而不是SQLite的错误。
下面是具体的修复步骤:
1. 完善Test环境的Doctrine配置
修改config/test/doctrine.yaml,不仅要配置DBAL,还要覆盖ORM的实体管理器配置,让所有实体管理器都指向SQLite连接。这里有两种可选方案:
方案一:为每个实体管理器单独配置SQLite连接
doctrine: dbal: default_connection: default connections: default: driver: 'pdo_sqlite' url: 'sqlite:///%kernel.project_dir%/var/data/test.sqlite' gui: driver: 'pdo_sqlite' url: 'sqlite:///%kernel.project_dir%/var/data/test.sqlite' upv6: driver: 'pdo_sqlite' url: 'sqlite:///%kernel.project_dir%/var/data/test.sqlite' orm: entity_managers: gui: connection: gui mappings: Gui: is_bundle: false type: annotation dir: '%kernel.project_dir%/src/Entity/Gui' prefix: 'App\Entity\Gui' alias: Gui upv6: connection: upv6 mappings: Upv6: is_bundle: false type: annotation dir: '%kernel.project_dir%/src/Entity/Upv6' prefix: 'App\Entity\Upv6' alias: Upv6
方案二:让所有实体管理器复用同一个SQLite连接(更简洁)
doctrine: dbal: default_connection: default connections: default: driver: 'pdo_sqlite' url: 'sqlite:///%kernel.project_dir%/var/data/test.sqlite' orm: entity_managers: gui: connection: default mappings: Gui: is_bundle: false type: annotation dir: '%kernel.project_dir%/src/Entity/Gui' prefix: 'App\Entity\Gui' alias: Gui upv6: connection: default mappings: Upv6: is_bundle: false type: annotation dir: '%kernel.project_dir%/src/Entity/Upv6' prefix: 'App\Entity\Upv6' alias: Upv6
2. 清理缓存并执行Schema创建
首先确保test环境的缓存是最新的,避免旧配置干扰:
php bin/console cache:clear --env=test
因为你有两个实体管理器,需要分别为它们执行表创建命令:
# 为gui实体管理器创建表 php bin/console doctrine:schema:create --env=test --em=gui # 为upv6实体管理器创建表 php bin/console doctrine:schema:create --env=test --em=upv6
如果用的是Linux/macOS,也可以用循环一次性执行:
for em in gui upv6; do php bin/console doctrine:schema:create --env=test --em=$em done
补充说明
之前的错误是MySQL的,因为你执行命令时没有指定实体管理器,Doctrine默认使用了gui或upv6实体管理器,而它们当时还连接着你的MySQL数据库,所以创建已存在的表时抛出了MySQL的错误。
内容的提问来源于stack exchange,提问作者Stefano Maglione
相关产品推荐
相关产品推荐

