laravel分批次处理大量数据以及chunk函数的使用方法
Song •
12460 次浏览 •
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;
});
更多相关好文
-
laravel中distinct()的使用方法与去重 2017-09-11
-
Laravel将view缓存为静态html,laravel页面静态缓存 2021-10-09
-
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01
-
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 2017-07-18
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
热门文章
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
-
Mac 安装mysql并且配置密码 2024-11-20
-
阿里云不同账号(跨账号)ECS服务器同地域如何实现免费内网互通? 2024-11-12
-
electron安装使用better-sqlite3并解决NODE_MODULE_VERSION xxx. This version of Node.js requires 2024-11-06
-
Zerotier+Moon+Nginx实现内网穿透搭建网站 2024-08-23
Laravel模型更新全表如何实现?