大量插入laravel许多记录

时间:2014-07-04 02:05:28

标签: php mysql laravel laravel-4 eloquent

我试图从sql表A中检索数据,修改一些列,然后将修改后的列插入到sql表B中。

但是我的问题是当我使用时:

    $customer= new Customer;
    $fakecustomer= new Fakecustomer;

            $fake_customer_name_records = $fakecustomer->get()->toArray();

               foreach($fake_customer_name_records as $record){

            //process columns for each record

                 $fake_customer_name_records_arry[]=array(
                  'last_name'=>$last_name,
                  'first_name'=>$first_name,
                  'home_phone'=>$phonenumber,
                  );
}

            $customer->insert($fake_customer_name_records_arry);

它只能插入大约1000条记录。 Laravel有办法让我处理大约60,000条记录吗?

由于

4 个答案:

答案 0 :(得分:4)

我建议使用" chunk"选项在这里,并在" chunks"中处理记录。根据我的观点,这是更本土化的方式。这是文档所说的内容:

  

分组结果

     

如果你需要处理很多(数千个)Eloquent记录,请使用   chunk命令可以让你不用吃掉你所有的RAM:

User::chunk(200, function($users)
{
    foreach ($users as $user)
    {
        //
    }
});
     

传递给该方法的第一个参数是您的记录数   希望收到每个" chunk"。 Closure作为第二个参数传递   将从数据库中提取的每个块调用。

链接阅读更多内容:click

答案 1 :(得分:0)

使用额外的变量并在每次迭代时求和1,当达到1000(或更低)时执行'insert'并重置计数器。

答案 2 :(得分:0)

您是否尝试使用DB::disableQueryLog();禁用查询日志?我遇到了同样的问题,这个问题解决了很多问题。

此外,在处理迁移或某些需要花费大量时间的流程时,请尝试创建command,而不是尝试使用controller

答案 3 :(得分:0)

Faker是一个PHP库,可以为您生成假数据。无论您是需要引导数据库,创建美观的XML文档,填充持久性以进行压力测试还是匿名化从生产服务中获取的数据,Faker都是您的理想选择。

使用此软件包int[] myIntArray = new int[3];

composer require fzaninotto/faker

您还可以从https://github.com/fzaninotto/Faker

阅读更多详细信息