Symfony2:使用自己的数据库在两个环境中复制实体
标题听起来有点奇怪,但我会尽力解释 我希望为客户提供两个环境,一个生产环境和一个QA环境。客户询问是否可以在QA环境中创建“产品”,然后将其复制到生产环境中。这可能吗Symfony2:使用自己的数据库在两个环境中复制实体,symfony,doctrine-orm,Symfony,Doctrine Orm,标题听起来有点奇怪,但我会尽力解释 我希望为客户提供两个环境,一个生产环境和一个QA环境。客户询问是否可以在QA环境中创建“产品”,然后将其复制到生产环境中。这可能吗 每个环境都有自己的数据库配置。不是Symfony2问题。在这里,满足您需求的一个可能解决方案是创建一个“草稿”实体,然后将其转换为“真实”实体,但您可以在生产环境中这样做 该草稿实体可以与真实实体完全相同,但将驻留在其自己的表中,等等。然后添加某种流程,允许用户将“草稿”转化为“真实”实体,可能通过服务(好像在某个点上,您无法在所
每个环境都有自己的数据库配置。不是Symfony2问题。在这里,满足您需求的一个可能解决方案是创建一个“草稿”实体,然后将其转换为“真实”实体,但您可以在生产环境中这样做 该草稿实体可以与真实实体完全相同,但将驻留在其自己的表中,等等。然后添加某种流程,允许用户将“草稿”转化为“真实”实体,可能通过服务(好像在某个点上,您无法在所述实体中添加/删除功能,您有一个中心点可以进行调整)
但是,在现实中,最简单的方法是向您的实体添加一个“草稿”标志,并在必要时使用该标志进行筛选。您可能需要两个实体经理
//config.yml
doctrine:
dbal:
default_connection: default
connections:
client:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
qa:
driver: %database_ga_driver%
host: %database_ga_host%
port: %database_ga_port%
dbname: %database_ga_name%
user: %database_ga_user%
password: %database_ga_password%
charset: UTF8
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
AcmeProductBundle: ~
qa:
connection: qa
mappings:
AcmeProductBundle: ~
然后只需编写一些函数来复制对象,一些操作如下所示:
$em = $this->getDoctrine()->getManager();
$qa_em = $this->getDoctrine()->getManager('qa');
$qa_object = $qa_em->getRepository('AcmeProductBundle:Product')->find(1);
$em->persist($qa_object);
$em->flush();
依我看,你的问题听起来更像是数据库问题,而不是Symfony2问题。您看过数据库集群解决方案吗?在我看来,创建数据库集群比尝试用一些PHP代码同步数据库更合适。