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

使用Symfony 1.4和doctrine我想将检索到的模型保存到不同的数据库连接:</ p>


  1. 从master-database检索模型</ li>
  2. 将数据库连接更改为slave-database </ li>
  3. 将模型保存到slave- 数据库</ li>
    </ ol>

    我在databases.yml中定义了2个连接。

    在伪代码中:</ p>

      $ model = [从master-database中检索]; 
    $ slaveConnection = Doctrine_Manager :: getInstance()
    • &gt; getConnection( 'slave-connection');
      $ model-&gt; save($ slaveConnection);
      </ code> </ pre>

      如果我创建一个新模型, $ model = 新模型(); </ code>上面的“代码”成功地将模型保存到从连接。</ p>

      出了什么问题?
      根据Symfony日志,Symfony识别出 模型现有并发出更新(而不是插入)。</ p>

        UPDATE模型SET updated_at ='2011-10-21 17:37:32'WHERI id ='1  '; 
      </ code> </ pre>

      虽然Symfony正在使用正确的数据库连接('slave-connection'),但更新失败,因为从属数据库中不存在该模型 但是。</ p>

      插入slave-database应该使用模型的所有值,而不仅仅是更改的值。</ p>

      任何人 能指出我将现有模型保存到不同数据库的正确方向吗?< / p>



      使用我的解决方案进行编辑。</ p>
      </ blockquote>
      </ blockquote>

      谢谢samura !</ p>

      只需添加一些内容:
      执行深层复制后,Symfony保存了一个新的ID。 但我想真正将模型对象克隆到slave db,所以我不得不修改id。

      导致唯一约束异常,所以我不得不先删除。 所以就是这样:</ p>

        $ id = $ model-&gt; getId(); 
      $ slaveConnection-&gt; execute(“从modeltable中删除id =”。$ id);
      $ model_copy = $ model-&gt; copy(true); #s deep copy
      $ model_copy-&gt; setId($ id);
      $ model_copy-&gt; save($ slaveConnection);
      </ code> </ pre>

      希望这有助于 别人绊倒了。</ p>
      </ div>

展开原文

原文

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.

php

1个回答



您可以使用 Doctrine_Record <的公共函数副本($ deep = false)</ code>方法 / code> class。</ p>

  $ model = [从master-database中检索]; 
$ slaveConnection = Doctrine_Manager :: getInstance()
  • &gt; getConnection('slave -connection'); $ model_copy = $ model-&gt; copy(true); #s deep copy $ model_copy-&gt; save($ slaveConnection); </ code> </ pre> </ div>

展开原文

原文

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);

du131642
du131642 在我的情况下,“从表中删除id = xx”返回0删除的行。
接近 9 年之前 回复
dongye1934
dongye1934 是的,你仍然需要检查对象是否存在于另一个数据库中。
接近 9 年之前 回复
dsapkqaduj6718493
dsapkqaduj6718493 非常感谢! 这让我走上了正确的道路。 为了完整起见,我将添加另一个答案。
接近 9 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐