首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据从一个连接复制到另一个连接?

问如何将数据从一个连接复制到另一个连接?
EN

Stack Overflow用户
提问于 2021-03-10 14:24:13
回答 1查看 126关注 0票数 2

我有一个mysql连接和一个pgsql (postgres,设置为默认)连接。

我必须从mysql中读取表中的所有行,然后将所有行保存到postgres中

我试过这样做,记住我的默认连接是pgsql

代码语言:javascript
复制
$mysql_model = new Regioni();
$regioni = $mysql_model->setConnection("mysql")->all();

但它仍在使用pgsql连接。

我确信这一点,因为我尝试将一行插入到pgsql表(它是空的),并且可以将这一行作为所有结果的结果。

另外,我(只是为了调试,不要讨厌我),修改了vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php,在这个方法中添加了一个调试回波

代码语言:javascript
复制
/**
 * Set the connection associated with the model.
 *
 * @param  string|null  $name
 * @return $this
 */
public function setConnection($name)
{
    echo "Model calling setConnection($name)" . PHP_EOL;
    $this->connection = $name;

    return $this;
}

因此,我可以看到

代码语言:javascript
复制
Model calling setConnection(mysql)
Model calling setConnection()
Model calling setConnection(pgsql)

第一个是我的显式setConnection的结果。

但是为什么调用->all()会将连接重置为默认连接呢?

主要目标/问题

怎样才能真正改变模型的连接呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-10 15:14:05

我贴出了我的实际解决方案。很丑,但很管用。

这样做的必要条件是默认连接是pgsql,所以我必须显式地设置连接以从nysql读取所有表记录。

在此之后,我循环遍历,然后保存到pgsql,只需在时间上执行插入操作。

代码语言:javascript
复制
    $regioni =  (new Regioni)->setConnection('mysql')->get();
    (new Regioni)->truncate();
    foreach($regioni as $r) {
        (new Regioni)->insert($r->toArray());
    }

请注意,这是专门为我的情况。

我有一个旧的mysql要迁移到新的postgresql postgres

  • this

  • ,我已经在postgresql上进行了迁移,所以所有的结构都准备好了--

  • --我从源读取所有数据,只需在插入之前只完成

  • I截断目标一次(在development)

中可重复)

如果你能提出更有效率的建议,请写一个答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66566689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档