为许多记录插入幼虫

问题描述 投票:0回答:4

我正在尝试从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条记录?

谢谢

php mysql laravel laravel-4 eloquent
4个回答
4
投票

我建议在这里使用“块”选项,并以“块”形式处理记录。我认为这是一种更自然的方式。这是文档说的:

分组结果

如果您需要处理大量(数千)口才记录,请使用chunk命令将使您无需消耗所有RAM即可完成操作:

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

传递给方法的第一个参数是您的记录数希望收到每个“大块”。闭包作为第二个论点通过从数据库中提取的每个块都将被调用。

更多链接:click


0
投票

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


0
投票

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

[此外,在进行迁移或需要很多时间的某些流程时,请尝试创建command,而不要尝试使用controller


0
投票

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

使用此软件包,composer require fzaninotto/faker

    $faker = Faker\Factory::create(); 
    for($i=1; $i<=100; $i++){
        $s = new User();
        $s->name = $faker->name;
        $s->email = $faker->email;
        $s->comments = $faker->text;  
        $s->save();
    } 

您也可以从https://github.com/fzaninotto/Faker阅读更多详细信息>

© www.soinside.com 2019 - 2024. All rights reserved.