为什么这个查询会在每次循环后增加我的内存? 我该如何解放这个结果?
我需要得到所有结果然后合并它们以处理业务逻辑 下面不用于显示,所以我不会正常分页。
public function getUser($startId, $endId)
{
$query = User::where('action', 'register')
->whereBetween('id', [$startId, $endId])
->whereNotNull('user_id');
return $query->get(['users.*']);
}
用户表有大约20k记录,下面的代码读取每1000条记录。
$chunk = 1000;
for ($i = 1; $i <= $count; $i += $chunk) {
$userLists = $this->getUser($i, $i + $chunk);
echo memory_get_usage();//It increase
}
我正在研究并放DB::disableQueryLogs()
但仍然吃内存
答案 0 :(得分:0)
如果需要处理数千个数据库记录,请考虑使用chunk方法。此方法一次检索一小部分结果,并将每个块提供给Closure进行处理。
DB::table('users')
->where('action', 'register')
->whereBetween('id', [$startId, $endId])
->whereNotNull('user_id')
->chunk(100, function ($users) {
foreach ($users as $user) {
//
}
});