1
使用Symfony的1.4和學說,我想一個檢索模型保存到不同的數據庫連接:複製在symfony的模型到另一個數據庫1.4
- 從主數據庫
- 變化的數據庫連接檢索模型到從屬數據庫
- 模型保存到從數據庫
我在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);
希望這可以幫助別人絆倒。
非常感謝!這使我走上了正確的道路。爲了完整性,我會添加另一個答案。 –
是的,你仍然需要檢查對象是否存在於另一個數據庫上。 – samura
在我的情況不是,''從表中刪除id = xx「'返回0個刪除行。 –