Symfony2:使用自己的数据库在两个环境中复制实体

Symfony2:使用自己的数据库在两个环境中复制实体,symfony,doctrine-orm,Symfony,Doctrine Orm,标题听起来有点奇怪,但我会尽力解释 我希望为客户提供两个环境,一个生产环境和一个QA环境。客户询问是否可以在QA环境中创建“产品”,然后将其复制到生产环境中。这可能吗 每个环境都有自己的数据库配置。不是Symfony2问题。在这里,满足您需求的一个可能解决方案是创建一个“草稿”实体,然后将其转换为“真实”实体,但您可以在生产环境中这样做 该草稿实体可以与真实实体完全相同,但将驻留在其自己的表中,等等。然后添加某种流程,允许用户将“草稿”转化为“真实”实体,可能通过服务(好像在某个点上,您无法在所

标题听起来有点奇怪,但我会尽力解释

我希望为客户提供两个环境,一个生产环境和一个QA环境。客户询问是否可以在QA环境中创建“产品”,然后将其复制到生产环境中。这可能吗


每个环境都有自己的数据库配置。

不是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代码同步数据库更合适。