在 symfony 1.4 中将模型复制到另一个数据库

发布于 2024-12-11 16:42:35 字数 1187 浏览 1 评论 0原文

使用 Symfony 1.4 和学说,我想将检索到的模型保存到不同的数据库连接:

  1. 从主数据库检索模型
  2. 将数据库连接更改为从数据库
  3. 将模型保存到从数据库

我在数据库中定义了 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:

  1. retrieve model from master-database
  2. change database connection to slave-database
  3. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

九歌凝 2024-12-18 16:42:36

您可以使用 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);

You could use the public function copy($deep = false) method of the Doctrine_Record class.

$model = [retrieved from master-database];
$slaveConnection = Doctrine_Manager::getInstance()
  ->getConnection('slave-connection');
$model_copy = $model->copy(true); # deep copy
$model_copy->save($slaveConnection);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文