laravel分批次处理大量数据以及chunk函数的使用方法
Song •
12295 次浏览 •
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 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
-
花生壳绑定ubuntu服务器? 2024-08-23
热门文章
-
花生壳绑定ubuntu服务器? 2024-08-23
-
Laravel模型更新全表如何实现? 2024-03-11
-
php图片转为二进制数据的方法 2023-10-23
-
Jquery如何监听动态创建元素的点击事件? 2023-09-08
-
所以SheetJS实现table导出数据为Excel 2023-09-05
栏目最新文章
本站主要用于学习交流Laravel技术,分享Laravel优秀案例;同时非常欢迎大家投稿哦!如果有招聘信息也可以联系我我帮忙发布哦!公告提示
提交评论