Php 如果我们有多个数据库和连接,如何加载

Php 如果我们有多个数据库和连接,如何加载,php,symfony,doctrine-orm,symfony4,fixtures,Php,Symfony,Doctrine Orm,Symfony4,Fixtures,我使用了以下文档: 现在我可以创建名为legacy和Project的新数据库,如下所示 doctrince.yaml: doctrine: dbal: default_connection: legacy connections: legacy: driver: pdo_mysql host: "%env(database_host)%" port: "%env(database_por

我使用了以下文档:

现在我可以创建名为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类,它们都是相互依赖的,还有一些将为legacy创建Fixture,还有一些将为project创建Fixture

现在我的问题是我什么时候做:

php bin/console原则:fixture:load--em=legacy

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

全班。。在链配置的命名空间中找不到

我现在的问题是如何在具有多个连接的多个数据库上加载装置。
提前感谢。

您应该阅读此文档:

我认为这可能会解决你的问题,因为这正是你想要做的

如果必须为旧设备创建夹具,只需使用:

$entityManager = $this->getDoctrine()->getManager('legacy');`
否则,如果是供项目使用

$entityManager = $this->getDoctrine()->getManager('project');`
此外,如果更改
原则.dbal.default_连接
,entityManager将针对已定义的连接运行

因此,您可以尝试创建

然后运行
项目的夹具

  • 编辑测试环境的配置
  • 然后为“项目”组运行fixture

  • 然后对“legacy”执行相同的操作

    但是对于我们正在使用的装置,
    ObjectManager
    ,例如
    public function load(ObjectManager$manager):void{…
    您是对的,我已经编辑了我的答案,希望它能对您有所帮助。
    #config/packages/test/doctrine.yaml
    doctrine:
        dbal:
            default_connection: 'project'
    
    > php bin/console doctrine:fixtures:load --group=project