内の別のデータベースへのモデル:コピー私は別のデータベース接続に取得したモデルを保存したいの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は正しいデータベース接続(「スレーブ接続を」)を用いているが、モデルがまだ、スレーブデータベースに存在しないため、更新は失敗します。
そして、スレーブデータベースへの挿入は、変更されたモデルだけでなく、モデルのすべての値を使用する必要があります。
誰かが、既存のモデルを別のデータベースに保存する正しい方向を指摘できますか?
私の解決策で編集してください。
ありがとうございました!
ほんの一部追加: 深いコピーを実行した後、symfonyは新しいIDを保存しました。しかし、私は実際にモデルオブジェクトをスレーブ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の削除された行を返します。 –