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

Song8503 次浏览2个评论2018年03月26日
在我们日常的系统维护中,我们常常需要处理大量数据,我们不可能一次性取出整个表进行数据处理,所以我们需要优化我们的处理程序,我们可以取出一部分数据然后再继续处理。 方法一:PHP分批次处理数据 我们可以使用如下方法来分批次获取数据,start代表开始,count代表每批次获取

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

方法一: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 条评论 回复
    评论
    查看更多评论!
    公告提示
    本站主要用于学习交流Laravel技术,分享Laravel优秀案例;同时非常欢迎大家投稿哦!如果有招聘信息也可以联系我我帮忙发布哦!