教义/ Symfony:如何在2个数据库中管理实体?

时间:2018-12-06 10:47:43

标签: symfony doctrine

我有2个数据库(defaulttest)。 default数据库对于生产环境和test对于开发环境都受影响。当两个数据库同步时,内容应相同。

因此,为了处理此请求,我遵循了以下文档:https://symfony.com/doc/current/doctrine/multiple_entity_managers.html

但是当我运行此命令php bin/console doctrine:schema:update --dump-sql --em=test时,我有No Metadata Classes to process.

使用与默认em相同的命令,我没问题。

那么,如何为两个数据库定义实体?

谢谢

编辑:
有关应用程序的更多信息:test数据库用于开发环境,其结构可能与default数据库不同。 test db将用于执行功能测试和验证新功能。完成验证过程后,test数据库结构和数据将合并到default数据库中。 这是分离生产和开发环境的策略。

编辑2:
我的配置是:

doctrine:
    dbal:
        default_connection: '%default_database_connection%'
        connections:
            default:
                driver: pdo_mysql
                host: '%database_default_host%'
                port: '%database_default_port%'
                dbname: '%database_default_name%'
                user: '%database_default_user%'
                password: '%database_default_password%'
                charset: UTF8
            test:
                driver: pdo_mysql
                host: '%database_test_host%'
                port: '%database_test_port%'
                dbname: '%database_test_name%'
                user: '%database_test_user%'
                password: '%database_test_password%'
                charset: UTF8

    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        default_entity_manager: '%default_entity_manager%'
        entity_managers:
            default:
                connection: default
                naming_strategy: doctrine.orm.naming_strategy.underscore
                auto_mapping: true
            test:
                connection: test
                naming_strategy: doctrine.orm.naming_strategy.underscore

1 个答案:

答案 0 :(得分:0)

因此,经过大量测试和研究,我找到了解决方案,但有局限性。

  1. 我完成了如下配置:

    default:
        connection: default
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            Bundle1: ~
            Bundle2: ~
    test:
        connection: test
        naming_strategy: doctrine.orm.naming_strategy.underscore
        mappings:
            Bundle1: ~
            Bundle2: ~
    
  2. 命令php bin/console doctrine:schema:update --dump-sql --em=test不起作用(我遇到错误There is no column with name 'email' on table 'users_account'.)。我没有花时间去研究这个问题,我已经使用phpMyAdmin将所有default基础结构复制到test基础。

  3. 我可以在同一控制器中同时使用两个连接:

    $emDefault = $this->getDoctrine()->getManager("default");
    $emTest = $this->getDoctrine()->getManager("test");
    
    $entity1 = $emDefault->find('Bundle1', 1);
    $entity2 = clone $entity1;
    
    $emTest->persist($entity2);
    $emTest->flush();