在 symfony 1.4 中将模型复制到另一个数据库
使用 Symfony 1.4 和学说,我想将检索到的模型保存到不同的数据库连接:
- 从主数据库检索模型
- 将数据库连接更改为从数据库
- 将模型保存到从数据库
我在数据库中定义了 2 个连接。 yml。 这里的伪代码是:
$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。但我想真正将模型对象克隆到从属数据库,因此,我必须修改 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);
希望如果其他人绊倒的话这会有所帮助。
Using Symfony 1.4 and doctrine I'd like to save a retrieved model to a different database connection:
- retrieve model from master-database
- change database connection to slave-database
- save the model to the slave-database
I have the 2 connections defined in databases.yml.
here in pseudo-code:
$model = [retrieved from master-database];
$slaveConnection = Doctrine_Manager::getInstance()
->getConnection('slave-connection');
$model->save($slaveConnection);
If I create a new model, $model=new model();
the "code" above successfully saves the model to the slave-connection.
What is going wrong?
According to the Symfony log, Symfony recognizes the model as existing and issues an update (instead of an insert).
UPDATE model SET updated_at = '2011-10-21 17:37:32' WHERE id = '1';
Although Symfony is using the correct database connection ('slave-connection'), the update fails because the model isn't present in the slave-database, yet.
And the insert into the slave-database should use all values of the model, not only the changed ones, too.
Anyone can point me to the right direction to save an existing model to a different database?
edit with my solution.
Thanks samura!
Just some additions:
After performing deep copy Symfony saved a new id. But I wanted to really clone the model object to the slave db and so, I had to modify the id.
That caused unique constraint exceptions, so I had to delete first. So this is it:
$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);
hope this helps if someone else stumbles.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用
Doctrine_Record
类的public function copy($deep = false)
方法。You could use the
public function copy($deep = false)
method of theDoctrine_Record
class.