标题听起来有点奇怪,但我会尝试解释。
我想为客户提供两种环境,一种生产环境和一种QA环境。客户询问是否可以在QA环境中创建“产品”,然后将其复制到生产环境中。这甚至可能吗?
环境中每个都有自己的数据库配置。
答案 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问题。这里有一个可能的解决方案是创建一个“草图”实体,然后可以将其转换为“真实”实体,但是您可以在生产环境中执行此操作。
该草案实体可以与真实实体完全相同,但会驻留在自己的表格中等等。然后添加某种过程,允许用户将“草稿”转换为“真实”实体,可能通过服务(好像在某些时候你不能在其中一个实体中添加/删除功能,你有一个集中点可以进行调整)。
但实际上,最简单的方法是在您的真实权利中添加“草稿”标记,并在必要时按此标记进行过滤。