laravel分批次处理大量数据以及chunk函数的使用方法
Song •
13281 次浏览 •
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;
});-
Laravel5.*实现FULL TEXT全文索引分页以及laravel实现文章标题和内容模糊搜索 2018-03-17 -
mysql/Mariadb开启全文检索fulltext配置以及大数据搜索优化 2018-03-17 -
mysql/Mariadb开启mysql慢查询对数据库进行优化 2018-03-16 -
[ laravel-mongodb教程 ] laravel使用MongoDB过程中常见错误与解决办法 2018-03-14 -
laravel5.* 关闭指定路由的CsrfToken与常见csrf错误分析 2018-03-10

laravel队列出现Failed to open stream: Too many open files