【问题标题】:mass insert laravel for many records为许多记录批量插入 laravel
【发布时间】:2014-08-25 06:53:46
【问题描述】:

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

谢谢

【问题讨论】:

  • 如果您告诉我们在尝试处理 60,000 时会发生什么可能会有所帮助?

标签: php mysql laravel laravel-4 eloquent


【解决方案1】:

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阅读更多详情

【讨论】:

    【解决方案2】:

    我建议在这里使用“块”选项,并在“块”中处理记录。在我看来,这是更本土的方式。这是文档所说的:

    分块结果

    如果您需要处理大量(数千)条 Eloquent 记录,请使用 chunk 命令将允许您在不吃掉所有 RAM 的情况下进行操作:

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

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

    阅读更多链接:click

    【讨论】:

    【解决方案3】:

    您是否尝试过使用 DB::disableQueryLog(); 禁用查询日志?我有同样的问题,这几乎解决了它。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2020-03-18
        • 1970-01-01
        • 1970-01-01
        • 2017-12-29
        • 1970-01-01
        • 2020-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多