2013-12-13 2 views
1

Название звучит немного странно, но я попытаюсь объяснить.Symfony2: копировать объекты в двух средах с собственной базой данных

Я хочу две среды для клиента, производственную среду и среду QA. Клиент спрашивает, можно ли создать «продукты» в среде QA, а затем скопировать это в производственную среду. Возможно ли это?

Окружающая среда имеет собственную конфигурацию базы данных.

+1

IMO, ваш вопрос звучит гораздо больше похож проблема с базой данных, а не с Symfony2. Вы взглянули на решение кластеризации базы данных? IMO, сделать кластер базы данных гораздо более уместным, чем пытаться синхронизировать базы данных с некоторым кодом PHP. – egeloen

ответ

2

Возможно, вам нужно два менеджера сущностей

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

Не проблема Symfony2. Одним из возможных решений для ваших нужд здесь является создание объекта «проекта», который затем может быть превращен в «реальный» объект, но вы сделаете это в своей производственной среде.

Этот объект проекта может быть как реальный, но будет находиться в его собственной таблице и т. Д. Затем добавьте какой-то процесс, который позволит пользователю превратить «проект» в «реальную» сущность, возможно через службы (как будто в какой-то момент вы не можете добавлять/удалять функциональные возможности в одном из указанных объектов, у вас есть централизованная точка, где можно выполнить адаптацию).

Но на самом деле самым простым способом является добавление флага проекта к вашему действию и фильтра по этому знаку, когда это необходимо.

Смежные вопросы