laravel分批次处理大量数据以及chunk函数的使用方法

Song12102 次浏览2个评论2018年03月26日

在我们日常的系统维护中,我们常常需要处理大量数据,我们不可能一次性取出整个表进行数据处理,所以我们需要优化我们的处理程序,我们可以取出一部分数据然后再继续处理。

方法一:PHP分批次处理数据

我们可以使用如下方法来分批次获取数据,start代表开始,count代表每批次获取数量。他的好处是可以兼容任何PHP框架。

$start = 0;
$count = 100;

while (true) 
{
    // 获取订单
    $orders = Orders::where("id","1")->skip($start)->take($count)->get();
    // 遍历处理订单
    foreach ($orders as $order) 
    {
    }
    // 不足数量退出
    if(count($orders) < $count) break;
    $start += $count;
}
return true;

方法二:使用laravel的chunk方法

如果你需要操作数千条数据库记录,可以考虑使用chunk方法。这个方法每次只取出一小块结果,并会将每个块传递给一个 闭包 处理。这个方法对于编写数千条记录的Artisan命令 是非常有用的。例如,让我们把users表进行分块,每次操作 100条数据:

DB::table(users)->orderBy(id)->chunk(100, function ($users) {
    foreach ($users as $user) {
        //
    }
});

你可以从 闭包 中返回false,以停止对后续分块的处理:

DB::table(users)->orderBy(id)->chunk(100, function ($users) {
    // Process the records...

    return false;
});


提交评论

请登录后评论

用户评论

  • Song Song 2017-07-16 04:00:58
    这里的from是start,写错了吧
    0 赞 0 条评论 回复
    评论
    查看更多评论!
  • Song Song 2017-07-16 04:00:58
    ``` // 获取订单 $orders = Orders::where("id","1")->skip($from)->take($count)->get(); ```
    0 赞 0 条评论 回复
    评论
    查看更多评论!

更多相关好文