我在用:
我需要将数据从一个DB移动到另一个DB。我所做的是编译一个大型查询,将所需的所有数据合并起来,并在Laravel结构中创建的PHP脚本中运行它。然后,我使用雄辩的方法迭代了结果,插入到MySQL中。我知道这很糟糕,但为了做到这一点,我不得不删除PHP的内存和时间限制,虽然花了很长时间,但它还是起了作用!
现在我意识到我遗漏了一些东西,我需要重新运行一个类似的查询(结果是相同的行数),但是这次我只需要在MySQL DB上添加一个字段。
我的问题是,我如何优化这个过程?我在考虑用块,但我不知道怎么做。
澄清:
如果我给你看我的代码可能会更简单。
发布于 2015-05-30 04:50:55
你可以用雄辩来做这件事。下面是我应该做的事情(未经测试,可能需要一些调优):
在config\database.php中设置两个DB连接。为同一资源创建两个模型(您只能使用一个模型,但我不使用),我将命名它们为M1和M2,具有不同的连接属性。为此,在模型中创建一个属性:protected $connection = 'connection_name'。
所以基本上:
class M1 extends Model {
protected $connection = 'connection_name';
protected $table = 'table_name';
protected $guarded = [];对于不同的M2和$connection也是一样的。
现在,在控制器方法中或在执行代码的任何地方,您可以使用雄辩的方法对查询块进行块处理:
//assuming you are transferring M1's db to M2's
M1::chunk(200, function($m1s) //if you wanna use only one model, this should be M1::on('connection-name')->chunk(...
{
foreach ($m1s as $m1)
{
$m2 = new M2();
//this does not copy model-specific attributes like $connection
$m2->fill( $m1->getAttributes() );
$m2->save();
}
});我想这是工作,你能测试一下吗?
https://stackoverflow.com/questions/30528336
复制相似问题