修复 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) 来清除单个关联,但实际效果并不可靠。建议一次性清除所有关联,以确保安全。