標題聽起來有點奇怪,但我會試着解釋。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問題。您需要的一種可能的解決方案是創建一個可以轉化爲「真實」實體的「草稿」實體,但您可以在生產環境中執行此操作。
該草稿實體可以完全像真實的草案,但會駐留在自己的表格等中。然後添加某種過程,允許用戶將「草稿」轉換爲「實際」實體,可能通過一個服務(就好像某些時候你不能在其中一個實體中添加/刪除功能一樣,你有一個集中點來進行修改)。
但實際上,最簡單的方法是給您的真實實體添加一個「草稿」標誌,並在必要時通過此標誌進行過濾。
IMO,你的問題聽起來更像一個數據庫問題而不是Symfony2。你看看數據庫集羣解決方案嗎?國際海事組織,使數據庫集羣比嘗試同步數據庫與一些PHP代碼更合適。 – egeloen