2011-10-21 54 views
1

使用Symfony的1.4和學說,我想一個檢索模型保存到不同的數據庫連接:複製在symfony的模型到另一個數據庫1.4

  1. 從主數據庫
  2. 變化的數據庫連接檢索模型到從屬數據庫
  3. 模型保存到從數據庫

我在databases.yml裏定義的2個連接。 在這裏僞代碼:

$model = [retrieved from master-database]; 
$slaveConnection = Doctrine_Manager::getInstance() 
    ->getConnection('slave-connection'); 
$model->save($slaveConnection); 

如果我創建一個新的模式,$model=new model();「代碼」上面成功保存的模型從連接。

什麼問題? 根據Symfony日誌,Symfony將模型識別爲現有模型併發布更新(而不是插入)。

UPDATE model SET updated_at = '2011-10-21 17:37:32' WHERE id = '1'; 

雖然Symfony的正在使用正確的數據庫連接(「從屬連接」),因爲模型不存在於從機數據庫,但更新失敗。

而插入到從數據庫中應該使用模型的所有值,而不僅僅是改變的值。

任何人都可以指向正確的方向將現有模型保存到不同的數據庫?

用我的解決方案編輯。

感謝samura!

只是一些補充: 執行深層複製後Symfony保存了一個新的ID。但我想真的將模型對象克隆到slave db,所以我必須修改id。 這導致了唯一的約束例外,所以我不得不先刪除。所以就是這樣:

$id = $model->getId(); 
$slaveConnection->execute("delete from modeltable where id=".$id); 
$model_copy = $model->copy(true); # deep copy 
$model_copy->setId($id); 
$model_copy->save($slaveConnection); 

希望這可以幫助別人絆倒。

回答

1

您可以使用Doctrine_Record類的public function copy($deep = false)方法。

$model = [retrieved from master-database]; 
$slaveConnection = Doctrine_Manager::getInstance() 
    ->getConnection('slave-connection'); 
$model_copy = $model->copy(true); # deep copy 
$model_copy->save($slaveConnection); 
+0

非常感謝!這使我走上了正確的道路。爲了完整性,我會添加另一個答案。 –

+1

是的,你仍然需要檢查對象是否存在於另一個數據庫上。 – samura

+0

在我的情況不是,''從表中刪除id = xx「'返回0個刪除行。 –

相關問題