我有2个数据库(default
和test
)。 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
答案 0 :(得分:0)
因此,经过大量测试和研究,我找到了解决方案,但有局限性。
我完成了如下配置:
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: ~
命令php bin/console doctrine:schema:update --dump-sql --em=test
不起作用(我遇到错误There is no column with name 'email' on table 'users_account'.
)。我没有花时间去研究这个问题,我已经使用phpMyAdmin将所有default
基础结构复制到test
基础。
我可以在同一控制器中同时使用两个连接:
$emDefault = $this->getDoctrine()->getManager("default");
$emTest = $this->getDoctrine()->getManager("test");
$entity1 = $emDefault->find('Bundle1', 1);
$entity2 = clone $entity1;
$emTest->persist($entity2);
$emTest->flush();