我有一个mysql连接和一个pgsql (postgres,设置为默认)连接。
我必须从mysql中读取表中的所有行,然后将所有行保存到postgres中
我试过这样做,记住我的默认连接是pgsql
$mysql_model = new Regioni();
$regioni = $mysql_model->setConnection("mysql")->all();但它仍在使用pgsql连接。
我确信这一点,因为我尝试将一行插入到pgsql表(它是空的),并且可以将这一行作为所有结果的结果。
另外,我(只是为了调试,不要讨厌我),修改了vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php,在这个方法中添加了一个调试回波
/**
* 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;
}因此,我可以看到
Model calling setConnection(mysql)
Model calling setConnection()
Model calling setConnection(pgsql)第一个是我的显式setConnection的结果。
但是为什么调用->all()会将连接重置为默认连接呢?
主要目标/问题
怎样才能真正改变模型的连接呢?
发布于 2021-03-10 15:14:05
我贴出了我的实际解决方案。很丑,但很管用。
这样做的必要条件是默认连接是pgsql,所以我必须显式地设置连接以从nysql读取所有表记录。
在此之后,我循环遍历,然后保存到pgsql,只需在时间上执行插入操作。
$regioni = (new Regioni)->setConnection('mysql')->get();
(new Regioni)->truncate();
foreach($regioni as $r) {
(new Regioni)->insert($r->toArray());
}请注意,这是专门为我的情况。
我有一个旧的mysql要迁移到新的postgresql postgres
中可重复)
如果你能提出更有效率的建议,请写一个答案。
https://stackoverflow.com/questions/66566689
复制相似问题