laravel分批次处理大量数据以及chunk函数的使用方法
Song •
11398 次浏览 •
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 2017-07-16 04:00:58
这里的from是start,写错了吧
0 赞 0 条评论 回复评论查看更多评论!// 获取订单 $orders = Orders::where("id","1")->skip($from)->take($count)->get();
更多相关好文
当前暂无更多相关好文推荐...-
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
-
div添加contenteditable属性后如何禁用拖放和粘贴操作? 2023-02-01
热门文章
-
div添加contenteditable属性后如何禁用拖放和粘贴操作? 2023-02-01
-
[ laravel爬虫实战--进阶篇 ] guzzle实现多张图片上传 2023-01-14
-
moment获取本月/本周/本年/上月/上周、或者指定日期的第一天/最后一天 2022-12-23
-
jQuery 密码验证 字母加数字或符号的组合密码,不能单独使用数字、字母或字符及 常用正则 2022-12-13
-
jquery正则表达式验证(手机号、身份证号、中文名称、数字) 2022-12-13
最新文章
本站主要用于学习交流Laravel技术,分享Laravel优秀案例;同时非常欢迎大家投稿哦!如果有招聘信息也可以联系我我帮忙发布哦!公告提示
提交评论