在Laravel中的chunk方法做什么用的,用法是怎样
Admin 2022-06-14 群英技术资讯 1100 次浏览
在laravel中,chunk()方法用于将集合分割为多个指定大小的较小集合,语法为“$指定集合->chunk(指定数量);”;该方法会对各个用户数据进行更新后再查看各个用户数据,这样在查询数据时没有获取大量数据,能够减轻系统的压力。
本文操作环境:Windows10系统、Laravel6版、Dell G3电脑。
chunk()
chunk 方法将集合分割为多个给定大小的较小集合。将集合显示到网格中非常有用。
$prices = collect([18, 23, 65, 36, 97, 43, 81]); $prices = $prices->chunk(3); $prices->toArray();
以上代码生成效果。
[ 0 => [ 0 => 18, 1 => 23, 2 => 65 ], 1 => [ 3 => 36, 4 => 97, 5 => 43 ], 2 => [ 6 => 81 ] ]
常规使用
如果有一个这样的需求:对数据库的全部数据查询出来,进行一系列更新
简单粗暴的方法是 把查询到的全部数据,使用foreach进行操作,然后再存入数据库。
$users = User::all(); foreach ($users as $user) { $some_value = ($user->some_field > 0) ? 1 : 0; $user->update(['some_other_field' => $some_value]); }
如果数据非常宠大,系统可能会耗尽内存,这个方法显然很笨拙。
Laravel 为此提供了一个简洁的解决方案
Laravel 的 chunk 方法可以将集合拆成多个指定大小的小集合
User::chunk(100, function ($users) { foreach ($users as $user) { $some_value = ($user->some_field > 0) ? 1 : 0; $user->update(['some_other_field' => $some_value]); } });
以上代码运行的原理是:
运行一个 chunk ,这个 chunk 查出100个用户数据,对各个用户数据进行更新
然后再查看100个用户数据,再执行更新操作,依此类推。
这意味着在查询数据时不会从数据库中获取大量数据,每次查询100条数据,而不是整个表。
这样就减轻的系统的压力。
2.需要注意的地方
本文重点来了:
但是要小心,有过滤结果的不能像这样运行
User::where('approved', 0)->chunk(100, function ($users) { foreach ($users as $user) { $user->update(['approved' => 1]); } });
从代码执行上讲,这个语句并不会引发任何错误
但是这里的问题是,您要过滤approved=0的用户,执行approved=1的数据库操作
然后chunk下一个100条数据,此时数据已经更改,您将错过一页数据。
这意味着您将只处理一半的条目,还有一半漏掉了。
解决方案:
在 Laravel 5.2 之后可以使用 chunkById 方法
在 Laravel 5.2 之前可以参考以下代码
while(User::where('approved', 0)->count() > 0) { User::where('approved', 0)->chunk(100, function ($users) { foreach ($users as $user) { $user->update(['approved' => 1]); } }); }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
使用phpstorm打开File ==> Settings ==> Code Style ==> PHP;找到 Wraping and Braces 下的 Array initializer;设置,以上,点击 Apply 应用即可。
事务对于很多新手来说都是比较难理解的内容,为了帮助大家熟悉事务,这篇文章就给大家介绍关于laravel eloquent实现事务的方式,下面我们一起来学习一下吧。
本文主题是“如何用一行PHP代码输出两整数间所有能被4整除的数”,注意不要使用任何PHP控制语句~
PHP中define定义常量的方法:1、PHP中的变量是指程序中使用的值可以改变的量,相反的是常量。2、常量值定义后,脚本的其他任何地方都不能改变。
我们知道laravel框架是PHP中比较常用的框架,这篇文章就主要介绍给大家分享一下Laravel 框架路由原理与路由访问,希望大家阅读完这篇文章之后都有所收获,感兴趣的朋友就继续往下看吧!
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008