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

时间:2013-12-13 08:26:26

标签: symfony doctrine-orm

标题听起来有点奇怪,但我会尝试解释。

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

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

2 个答案:

答案 0 :(得分:3)

有可能,您需要两个实体经理

//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();

答案 1 :(得分:0)

不是Symfony2问题。这里有一个可能的解决方案是创建一个“草图”实体,然后可以将其转换为“真实”实体,但是您可以在生产环境中执行此操作。

该草案实体可以与真实实体完全相同,但会驻留在自己的表格中等等。然后添加某种过程,允许用户将“草稿”转换为“真实”实体,可能通过服务(好像在某些时候你不能在其中一个实体中添加/删除功能,你有一个集中点可以进行调整)。

但实际上,最简单的方法是在您的真实权利中添加“草稿”标记,并在必要时按此标记进行过滤。