chunk() 的用法
有时,我们可能会一次性查出很大的结果集(上万条记录),这样就很可能导致内存溢出。
Laravel 框架的 chunk() 方法,可以将数据分块,每次只查询指定数量的数据块,交给回调函数处理。从而在处理大量数据集合时,能够有效减少内存消耗。
User::where('status', 0)->chunk(100, function ($users) {
foreach ($users as $user) {
$user->update(['name' => 'jack']);
}
});
其实,chunk() 方法就是分页获取数据块。
chunk() 的注意事项
如果 chunk() 方法的回调函数,内部有自更新,影响到了原始查询条件的记录总数,就会出现遗漏数据的情况。
比如,将上面的
$user->update(['name' => 'jack']);
更改为
$user->update(['status' => 1]);
其实,原因很简单,因为 chunk() 每次分块(分页)都会对原始数据进行重新查询。如果原始数据变了,就可能会影响到分页的偏移。
错误示例: