Laravel Eloquent吃了记忆

时间:2017-03-21 07:57:45

标签: laravel memory-leaks

为什么这个查询会在每次循环后增加我的内存? 我该如何解放这个结果?

我需要得到所有结果然后合并它们以处理业务逻辑 下面不用于显示,所以我不会正常分页。

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()但仍然吃内存

1 个答案:

答案 0 :(得分:0)

如果需要处理数千个数据库记录,请考虑使用chunk方法。此方法一次检索一小部分结果,并将每个块提供给Closure进行处理。

Chunking query results

DB::table('users')
    ->where('action', 'register')
    ->whereBetween('id', [$startId, $endId])
    ->whereNotNull('user_id')
    ->chunk(100, function ($users) {
    foreach ($users as $user) {
        //
    }
});