修复 Laravel Eloquent 在大数据集下的内存泄漏

发布: (2026年3月3日 GMT+8 09:36)
1 分钟阅读
原文: Dev.to

Source: Dev.to

问题

在处理大数据集时,通过 Eloquent 属性访问关联会导致内存使用持续上升。每个模型实例都会在自身上缓存已加载的关联,循环遍历结束后,这些对象仍然保留在内存中。

此问题已在 Laracasts 讨论帖 中报告,且有人找到了对应的解决方案。

解决方案

使用完关联后,手动调用 setRelations([]) 来清除缓存:

$users = User::with('posts')->get();

foreach ($users as $user) {
    $posts = $user->posts;
    // 清除关联缓存以释放内存
    $user->setRelations([]);
}

在讨论中也有人提到使用 $user->setRelation('posts', null) 来清除单个关联,但实际效果并不可靠。建议一次性清除所有关联,以确保安全。

0 浏览
Back to Blog

相关文章

阅读更多 »

不糟糕的语义失效

缓存问题 如果你在 Web 应用上工作了一段时间,你就会了解缓存的情况。你加入缓存,一切都变快了,然后有人……