如果我们有多个数据库和连接,如何加载教义装置

问题描述

我使用了此文档:https://symfony.com/doc/4.4/doctrine/multiple_entity_managers.html

所以现在我可以像这样创建名为legacy和Project的新数据库

doctrince.yaml:

doctrine:
  dbal:
    default_connection: legacy
    connections:
      legacy:
        driver: pdo_MysqL
        host: "%env(database_host)%"
        port: "%env(database_port)%"
        dbname: "%env(database_name)%"
        user: "%env(database_user)%"
        password: "%env(database_password)%"
        charset: UTF8
      project:
        driver: pdo_MysqL
        host: "%env(database_host_project)%"
        port: "%env(database_port_project)%"
        dbname: "%env(database_name_project)%"
        user: "%env(database_user_project)%"
        password: "%env(database_password_project)%"
        charset: UTF8
  orm:
    default_entity_manager: legacy
    entity_managers:
      legacy:
        connection: legacy
        mappings:
          Legacy:
            is_bundle: false
            type: annotation
            dir: "%kernel.project_dir%/..."
            prefix: '...'
            alias: Legacy
      project:
        connection: project
        auto_mapping: true
        mappings:
          Project:
            is_bundle: false
            type: annotation
            dir: "%kernel.project_dir%/src/Entity"
            prefix: 'App\Entity'
            alias: Project

现在我有几个Fixture类,它们都相互依赖,还有一些将为旧版创建Fixture,一些为项目创建。

现在我的问题是我何时做:

PHP bin/console doctrine:fixtures:load --em=legacy

它运行项目的附件,但不运行捆绑包的附件。 然后我得到这个错误

在链配置的名称空间中找不到类..

我的问题是现在如何在具有多个连接的多个数据库上加载灯具。 预先感谢。

解决方法

您应该阅读此文档:https://symfony.com/doc/current/doctrine/multiple_entity_managers.html

我认为这可能会解决您的问题,因为这正是您要尝试做的事情。

如果您必须为旧版创建固定装置,只需使用:

$entityManager = $this->getDoctrine()->getManager('legacy');`

其他是否用于项目

$entityManager = $this->getDoctrine()->getManager('project');`

此外,如果您更改doctrine.dbal.default_connection,entityManager将针对定义的连接运行。

因此,您可以尝试创建group of fixtures

然后为project运行固定装置:

  1. 编辑测试环境的配置
#config/packages/test/doctrine.yaml
doctrine:
    dbal:
        default_connection: 'project'
  1. 然后运行“项目”组的夹具
> php bin/console doctrine:fixtures:load --group=project

然后为“传统”做同样的事情