laravel的chunk方法怎么用
时间:2022-06-07 [网络编程]作者:fabuyuan 浏览:4 次
在laravel中,chunk()方法用于将集合分割为多个指定大小的较小集合,语法为“$指定集合->chunk(指定数量);”;该方法会对各个用户数据进行更新后再查看各个用户数据,这样在查询数据时没有获取大量数据,能够减轻系统的压力。
本文操作环境:Windows10系统、Laravel6版、Dell G3电脑。
laravel的chunk方法怎么用
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]); } }); }
【相关推荐:laravel视频教程】
以上就是laravel的chunk方法怎么用的详细内容,更多请关注站长家园其它相关文章!
本文标签: Laravel
转载请注明来源:laravel的chunk方法怎么用
本文永久链接地址:https://www.adminjie.com/post/13174.html
免责声明:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
附:
二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!
版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的部分源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,若有侵犯你的权益请:提交版权证明文件到邮箱 2225329873#qq.com(#换为@) 站长会进行审查之后,情况属实的会在三个工作日内为您删除。
更多精彩内容
- VUE中V-IF条件判断改变元素的样式操作
- Discuz如何解决安装时报错run_sql_error
- 低版本VS项目在VS2019无法正常编译的问题
- PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
- Oracle数据库的实例/表空间/用户/表之间关系简单讲解
- RSA2是啥?PHP-RSA2签名验证怎么实现?
- app是什么应用程序的简称
- 华为dubal20是什么型号
- 小程序大小超限除了分包还能怎么做?如何避免和解决大小限制?
- 电脑显示信号线无连接是什么意思
- ana an00华为是什么型号
- html5中onclick是什么意思
- 超清视效是什么意思
- vivov1818a是什么手机型号
- html5的标题标记一共有几个等级

- 最新文章
-
-
浅析Angular中的独立组件,看看怎么使用
本篇文章带大家了解一下Angular中的独立组件,看看怎么在Angular中创建一个独立组件,怎么在独立组件中导入已有的模块,希望对大家有所帮助!Angular...
-
link是不是css3新增样式规则
link不是css3新增样式规则。“:link”是在css3之前就已经可以使用的选择器,可以用于设置链接的样式,该选择器用于选取未被访问的链接,不会设置已经访问...
-
css3动画是个软件吗
css3动画不是软件,css动画是使元素逐渐从一种样式变为另一种样式,是通过css配合html语言来实现的;css动画的本质是动画属性可以逐渐地从一个值变化到另...
-
css3支持border属性吗
css3支持border属性,该属性从css1时就已经开始支持了;border属性是边框属性的简写属性,可以用于指定元素边框的样式、宽度和颜色,属性值只设置一个...
-
怎么用php的sort实现一个排序
在php中,sort可以用于对数值数组进行升序排序,语法为“sort(要进行排序的数组,规定如何排序数组的元素)”;如果排序成功,返回的结果是true,若失败则...
-
- 热门文章
-
-
VUE中V-IF条件判断改变元素的样式操作
这篇文章主要介绍了VUE中V-IF条件判断改变元素的样式操作,具有很好的参考价值,希望对大家有所帮助。一起跟随想过来看看吧...
-
Discuz如何解决安装时报错run_sql_error
问题环境VMware虚拟机Centos7.3PHP7.0MySQL8.0NGINX1.14Discuz3.4问题还原本地环境为PHP5.6+MySQL5.6在安...
-
低版本VS项目在VS2019无法正常编译的问题
低版本VS项目在VS2019无法正常编译的问题这里指的编译并不准确,只是为了方便说明。后有(未安装),201?...
-
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
实现原理使用redis链表来做,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用。实现步骤第一步,先将商品库存入队列/**.trigge...
-
Oracle数据库的实例/表空间/用户/表之间关系简单讲解
完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。Oracle是一种数据库管理系统,是一种关系型的数据库管理系统。我们用这些高级权限账号...
-