You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:53:39